阿里云图片上传返回地址有blob格式问题处理实录

这篇具有很好参考价值的文章主要介绍了阿里云图片上传返回地址有blob格式问题处理实录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.问题描述以及原因分析

2.处理方式说明

2.1根据上传返回响应状态
2.2调用GetObject接口获取下文件的大小

1.问题描述以及原因分析

    阿里云OSS上传图片功能很多人可能对实现过,正常情况下会返回https开头的图片地址.但是今天业务系统中运营人员反应上传的合同详情页面打开异常,看过服务端的日志之后发现用户上传的图片地址带有blob,线上返回异常图片地址如下:
阿里云图片上传返回地址有blob格式问题处理实录

    造成这种的现象的原因就是服务端进行多个图片截取时处理异常,导致页面打开失败!现在说下问题处理方式.

2.处理方式说明

    咨询过官方客服,反馈说正常情况下oss上传图片不会存在返回类似于blob:XXX格式,提供的处理方式就是判断图片上传是否成功.这里阿里云OSS图片上传使用的是服务端sdk实现,先看下原始的图片上传逻辑:

 public String uploadImg(MultipartFile[] multipartFiles) {


        // 返回多张图片地址
        String imgs="";

        for (int i = 0; i < multipartFiles.length; i++) {
          
            try {
                String fileName = System.currentTimeMillis()+"_"+multipartFiles[i].getOriginalFilename();
                String pathKey=filePath + fileName;
                // bucketName表示阿里云OSS存储的配置信息:bucketName
                ossClient.putObject("bucketName", pathKey, new ByteArrayInputStream(multipartFiles[i].getBytes()));
  
                    if(i < multipartFiles.length-1){
                        imgs = imgs + aliyunConfig.getUrlPrefix() + pathKey+",";
                    }else {
                        imgs = imgs + aliyunConfig.getUrlPrefix() + pathKey;
                    }
                }


            } catch (Exception e) {
                log.error("图片上传失败:{}",e.getMessage());
                throw new Exception("图片上传失败:"+e.getMessage());
            }
        }
      
        return imgs;
    }

    关于图片地址是直接进行字符串拼接,没有和阿里云OSS服务进行请求交互,这里的意思可以理解为应用服务端接口请求完成,并不代表阿里云OSS服务端文件存储完成(客户端存在的情况可能是五花八门,无法全部复现),最稳妥的处理方式是请求一下阿里云OSS服务端判断已上传成功的文件与原始的文件是否相同,如果相同则认为是一次有效的上传操作.现在提供两种处理方式,可以根据情况进行选择(两种方式均展示核心上传逻辑).

    

2.1根据上传返回响应状态
// bucketName表示阿里云OSS存储的配置信息:bucketName
PutObjectResult putObjectResult = ossClient.putObject("bucketName", pathKey, new ByteArrayInputStream(multipartFiles[i].getBytes()));
if(putObjectResult.getResponse().getStatusCode()==200){
    if(i < multipartFiles.length-1){
        imgs = imgs + aliyunConfig.getUrlPrefix() + pathKey+",";
    }else {
        imgs = imgs + aliyunConfig.getUrlPrefix() + pathKey;
    }
}

注意sdk版本需要升级到:3.15.0,依赖如下:

<dependency>
			<groupId>com.aliyun.oss</groupId>
			<artifactId>aliyun-sdk-oss</artifactId>
			<version>3.15.0</version>
		</dependency>

    

2.2调用GetObject接口获取下文件的大小
// bucketName表示阿里云OSS存储的配置信息:bucketName
ossClient.putObject(aliyunConfig.getBucketName(), pathKey, new ByteArrayInputStream(multipartFiles[i].getBytes()));
                ObjectMetadata objectMetadata = ossClient.getObject(aliyunConfig.getBucketName(), pathKey).getObjectMetadata();
                // 判断已上传文件大小与原始上传文件大小是否相同
                if (objectMetadata.getContentLength() == multipartFiles[i].getSize()) {
                    if(i < multipartFiles.length-1){
                        imgs = imgs + aliyunConfig.getUrlPrefix() + pathKey+",";
                    }else {
                        imgs = imgs + aliyunConfig.getUrlPrefix() + pathKey;
                    }
                }

    以上是对于此问题的两种处理方式,这次处理之后经过一段时间测试暂时没有反馈异常的图片上传问题,如果感觉对你有帮助欢迎评论区留言或是点赞收藏!文章来源地址https://www.toymoban.com/news/detail-420332.html

到了这里,关于阿里云图片上传返回地址有blob格式问题处理实录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • axios返回几种数据格式? 其中Blob返回时的size是什么意思?

    axios返回几种数据格式? 其中Blob返回时的size是什么意思? 1、字符串(String):服务器可以返回纯文本或HTML内容,Axios会将其作为字符串返回。 2、JSON(JavaScript Object Notation):这是最常见的数据格式,服务器可以返回JSON格式的数据,Axios会将其解析为JavaScript对象。 3、数组(

    2024年02月09日
    浏览(36)
  • 图片格式转换(File、Blob、base64)

    前言 记录一下比较常见的图片格式(File、Blob、base64)在不同的场景他们之间的相互转换的方法。 一、类型简介 Blob BLOB(binary large object): 二进制大对象,是一个可以存储二进制文件的容器。 在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。 属性名称 读/写 描

    2024年02月02日
    浏览(67)
  • vue 后端返回二进制流-前端通过blob对象下载文件-图片

    前言 在实际开发中我们经常会遇见下载文件的场景,比如下载合同,下载文件 下载文件有2种方式,一种是后端返回二进制流,前端通过blob对象接受根据不同类型下载 还有一种把地址直接在浏览器新窗口打开浏览器打开pdf可以预览和下载,其他文件直接下载 但不管是那种方

    2024年02月05日
    浏览(76)
  • element ui上传限制图片格式及宽高像素问题

    比如上传图片的像素值的最大尺寸264*300 VUE 下面将在方法里去限制图片的上传类型和像素值限制 JS

    2024年02月03日
    浏览(36)
  • 【js】js前端技巧之图片格式转换(File、Blob、base64):

    一、类型简介 BLOB(binary large object) : 二进制大对象,是一个可以存储二进制文件的容器。 在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。 属性名称 读/写 描述 size 只读 Blob 对象中所包含数据的大小(字节)。 type 只读 一个字符串,表明该Blob对象所包含数据

    2024年02月07日
    浏览(52)
  • axios请求设置responseType为‘blob‘或‘arraybuffer‘下载时,正确处理返回值

    问题:调用后台图片接口,后台返回二进制流图片数据格式。前端接收到流后处理数据显示在img标签。 解决: 1、设置axios接收参数格式为\\\"arraybuffer\\\": 2、转换为base64格式图片数据在img标签显示: 返回的string直接放在img标签src可直接显示 二、设置axios接收参数格式为\\\"blob\\\":

    2023年04月09日
    浏览(42)
  • 记录阿里云服务配置 https 地址,各种报错问题处理

            这几天公司配置电商小程序需要使用https地址,也就是后台服务需要配置https 端口,百度使用方法,有些坑需要注意,这里做个笔录,记录下来 1、云服务器本身地址是http的,初始是IP地址+端口的模式,需要有一级域名才能解析二级域名使用,这里不在复述。 2、

    2024年02月03日
    浏览(39)
  • Vue3 - 详细实现下载从服务端返回的文件流 Blob 对象教程,前端下载后端接口返回的文件流并自动保存到本地,支持任何格式的文件下载(从后端拿到二进制文件流 Blob 对象,前端实现点击下载功能)

    调用服务端(后端)接口拿到文件流,通过前端下载并保存到本地。 本文 实现了在 vue3 项目中,通过后端接口返回的二进制文件流 Blob 对象,在前端进行点击下载并保存到用户本地,任何格式的文件都可以轻松下载, 保证您直接复制代码,改个请求地址就可以使用了, 如下

    2024年02月04日
    浏览(200)
  • 前端下载文件流,设置返回值类型responseType:‘blob‘无效的问题

    本是一个非常简单的请求,即是下载文件。通常的做法如下: 1.前端通过Vue Axios向后端请求,同时在请求中设置响应体为Blob格式。 2.后端相应前端的请求,同时返回Blob格式的文件给到前端(如果没有步骤1设置响应体,则后端返回的是一个文件流,前端) 3.前端创建a标签进行

    2024年01月17日
    浏览(68)
  • Vue前端处理blob二进制对象图片的方法

    近期在做开发的时候遇到一个问题,前端传递一个参数,后端返回一张图片,前端再将该图片展示出来,由于是第一次处理二进制图片对象,特此记录一下。 首先,已知后端接口无误,传递参数可以正常返回图片    前端调用接口,打印并查看获取到的响应数据:     显然

    2024年02月16日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包