解决阿里云oss上传图片,打开地址直接下载,亲测有效!

今天将图片保存到阿里云的时候,发现打开图片地址后直接下载,在网上百度了一下,也没解决,于是通过官方帮助文档解决了。

1.先注意阿里云默认存储图片的请求头为 image/jpeg,此时打开图片地址就会直接下载。将请求头改为image/jpg,图片就能够打开了,哈哈,是不是很聪明! 但是每上传一次就要修改一次,肯定不符合程序猿的脑回路,那就看看官网是怎么解决的。
在这里插入图片描述
2. 以下是阿里云官方手册提供的设置请求头的方法

// 如果需要上传时设置存储类型与访问权限,请参考以下示例代码。
// ObjectMetadata metadata = new ObjectMetadata();
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());

官方帮助链接

https://help.aliyun.com/document_detail/84781.html?spm=5176.8466032.0.0.1d0b1450M3Icp8

好了,上代码,看怎样上传。
Controller层:

@RestController
@RequestMapping("/eduoss/oss")
@CrossOrigin
public class OssFileController {
    @Autowired
    private OssFileService ossFileService;
    //上传文件到阿里云oss的方法
    @PostMapping("upload")
    public R uploadFileAliyunOss(MultipartFile file) {
        //1 获取上传文件  MultipartFile file
        //file参数名称不是随便写的 和文件上传输入项里面name属性值一样 <input type="file" name="file"/>
        String url = ossFileService.uploadAliyun(file);
        return R.ok().data("url",url);
    }
}

service层

@Service
public class OssFileServiceImpl implements OssFileService {

    //上传文件到阿里云oss
    @Override
    public String uploadAliyun(MultipartFile file) {
        try {
            // 1 获取上传需要的固定值
            String endpoint = ConstantPropertiesUtil.END_POINT;      //你的站点
            String accessKeyId = ConstantPropertiesUtil.ACCESS_KEY_ID;  //你的acess_key_id
            String accessKeySecret = ConstantPropertiesUtil.ACCESS_KEY_SECRET; //你的acess_key_secret
            String bucketName = ConstantPropertiesUtil.BUCKET_NAME;		//你的bucket_name

            //2 创建OssClient对象
            OSSClient ossClient = new OSSClient(endpoint,accessKeyId,accessKeySecret);
            //3 获取文件信息,为了上传
            //文件输入流
            InputStream in = file.getInputStream();

            //文件名称
            String fileName = file.getOriginalFilename();
			// meta设置请求头
            ObjectMetadata meta = new ObjectMetadata();
            meta.setContentType("image/jpg");
            ossClient.putObject(bucketName, fileName, in, meta);
             //关闭ossClient
            ossClient.shutdown();

            //返回上传之后地址,拼接地址
            String uploadUrl = "https://"+bucketName+"."+endpoint+"/"+fileName;
            return uploadUrl;
        }catch(Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

好了,用swagger测试上传图片请求头信息已经是image/jpg,成功访问!

  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值