使用 cropper 图片裁剪插件上传时,前段将裁剪后图片转成了 blob 文件。现在要将该 blob 文件上传到阿里云的 OSS 上。
页面(使用 cropper 插件需要在页面中引入 cropper.css 和 copper.js):
1 | <form action=""> |
js:
1 | // 从本地选择裁剪图片 |
Java 后台代码:
1 | public class AliyunOssUtil { |
1 | /** |
前台直接在 <img>
标签的 src 属性上使用 blob 文件在阿里云 OSS 上的访问路径即可,例如:
1 | <img src="https://bucket.oss-cn-shanghai.aliyuncs.com/89b3a8eb-1086-40fc-23ac-9593bf6ae111.blob" width="300" height="300"> |
如果可以的话,不需要将 blob 上传到阿里云,直接保存到数据库的字段中。
补充:将 blob 文件上传到本地文件系统
将图片上传到本地,然后在页面通过请求将 blob 转成 二进制流输出到页面:
1 | /** |
上面代码: response.setHeader("Content-Type", "image/png");
后面的 image/png
不能改成其他的 Content-Type
。
Cropper 插件在转换时首先把图像转成 PNG 数据,然后再把得到的二进制的 PNG 数据转成纯 ASCII 的 base64 编码的字符串,所以后台拿到的 base64 数据是从 png 格式的图片获取到的。
如果不是 image/png
,在 IE 浏览器显示上传的非 png 格式的图片时,控制台会报错:
1 | IE 无法解码 URL 处图像 |
错误表示设置的图片格式与图片原来的格式不一致。
https://fanghe1995.github.io/2017/08/25/IE-DOM7009/
如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理