背景
项目里有图片上传的需求,具体实现是后端生成presigned url(预签名url,里面包含上传到AWS S3所需要的一些认证标识信息)给到前端,前端通过这个URL将文件上传到云服务上。但是上传成功后,从CDN上下载下来的文件打不开,而且只有前端有这个问题,客户端可以正常上传,一开始以为是框架问题,而且亚马逊官方也没有直接上传相关的文档(都是使用SDK的方式上传),所以问题很难定位,后来在github上找到了方案。
从后端获取presigned url ,亚马逊官网有Java、PHP、node等生成presigned url的文档
使用presigned url上传图片,前端使用的是element UI + axios, 这里使用的element UI 自定义上传的方式,特别需要注意的就是直接上传文件,不要用formdata的格式上传
HTML部分
<el-upload
class="avatar-uploader"
action="123"
:http-request="upload"
:before-upload="beforeAvatarUpload">
<img v-i
import com.amazon
aws
.auth.
AWS
Credentials;
import com.amazon
aws
.auth.
AWS
StaticCredentialsProvider;
import com.amazon
aws
.a...
当我们通过java的API
上传
文件
的时候就会发现,我们把java的API封装了一下,提供了一个接口给其他应用调用,那么整个的
上传
流程就变成了“应用客户端”-->“JavaAPI端”-->“minio
服务
端”。中间通过JavaAPI转了一次。比如我们的“应用客户端”是web浏览器的时候,能不能直接从浏览器
上传
到“minio
服务
端”呢?答案是可以的,minio有提供
JS
SDK,我们可以通过
JS
API直接
上传
到“minio
服务
端”。
JS
SDK
参考官网的文档:https://docs.min.i
@GetMapping
(
"/uploadFile"
)
public Object generate
PreSigned
Url
AndUploadObject
(
String fileName
)
{
Map<St.