由于使用阿里云OSS时,如果Bucket不绑定自己的域名,则无法通过URL直接预览图片,而是通过附件的形式下载。而且我自己购买的域名并不满足备案条件,于是改用百度智能云提供的BOS对象存储。
阿里云官方说明:
访问您的图片文件,无法预览,直接下载,是由于从从2019年9月23日起,针对之后新建的Bucket,直接使用OSS提供的默认域名,从互联网访问OSS上该Bucket的图片类型文件时,mimetype为以下值,
Response Header中会自动加上Content-Disposition:’attachment=filename;’。
即从浏览器访问图片类型文件时,会以附件形式进行下载,如果您要直接在浏览器中预览文件而非下载文件,请设置文件HTTP头中的Content-Disposition为inline并使用Bucket绑定的自定义域名进行访问
以下是我的图片上传至百度智能云BOS具体步骤:
1.开通百度智能云对象存储BOS
首页搜索对象存储,开通后跳转到管理控制台
2.创建Bucket
点击Bucket列表
3.导入依赖
1 2 3 4 5
| <dependency> <groupId>com.baidubce</groupId> <artifactId>bce-java-sdk</artifactId> <version>0.10.261</version> </dependency>
|
4.编写工具类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| import com.baidubce.auth.DefaultBceCredentials; import com.baidubce.services.bos.BosClient; import com.baidubce.services.bos.BosClientConfiguration; import org.apache.commons.io.FilenameUtils; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.UUID;
public class BosUpload { public static final String BAIDUYUN_DOMAIN = "xxx"; public static final String ACCESS_KEY_ID = "xxx"; public static final String SECRET_ACCESS_KEY = "xxx"; public static final String BUCKET_NAME = "xxx";
public static String uploadImg(MultipartFile file) throws IOException { BosClientConfiguration config = new BosClientConfiguration(); config.setCredentials(new DefaultBceCredentials(ACCESS_KEY_ID, SECRET_ACCESS_KEY)); BosClient client = new BosClient(config);
String originalFilename = file.getOriginalFilename(); String extension = "."+ FilenameUtils.getExtension(originalFilename); String uuid = UUID.randomUUID().toString().replaceAll("-", ""); String fileName = uuid+extension;
client.putObject(BUCKET_NAME,fileName, file.getBytes());
return BAIDUYUN_DOMAIN + fileName; } }
|
其中ACCESS_KEY_ID和SECRET_ACCESS_KEY可以在图片中的页面中得到
默认域名可以在随便上传一张图片后打开看到
比如这里是 https://bucket-demo01.bj.bcebos.com/
5.测试
Controller接口
1 2 3 4 5 6 7
| @RestController public class TestController { @PostMapping("/upload") public String upload(MultipartFile file){ return BosUpload.uploadImg(file); } }
|
前端页面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body>
<form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="file" value="上传图片"> <input type="submit" value="上传"> </form>
</body> </html>
|
选择图片上传后
看到页面返回了图片的URL,再到百度智能云的控制台可以看到已经上传成功了
最后要注意,通过URL访问需要开启公共读权限
更多操作内容可以参考官方文档
概述 - 对象存储BOS | 百度智能云文档 (baidu.com)