今天将图片保存到阿里云的时候,发现打开图片地址后直接下载,在网上百度了一下,也没解决,于是通过官方帮助文档解决了。
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,成功访问!