配置文件
首先是配置文件application.yml
address
为bucket
的地址,用来获取图片上传后的图片地址,以便之后访问
end-point
是阿里云提供的oss的地址,在oss文档中有介绍
access-key
和sercret-key
是密钥
bucket
是oss储存的名称
# 阿里云 oss储存服务
aliyun:
oss:
address: your oss address
end-point: oss-cn-shenzhen.aliyuncs.com
access-key: your access key
secret-key: you secret key
bucket: your bucket name
代码
然后直接上代码
先是把属性值注入
/** oss处访问图片的 url */
@Value("${aliyun.oss.address}")
private String address;
/** oss的 endpoint */
@Value("${aliyun.oss.end-point}")
private String endPoint;
@Value("${aliyun.oss.access-key}")
private String accessKey;
@Value("${aliyun.oss.secret-key}")
private String secretKey;
/** oss的储存名称 */
@Value("${aliyun.oss.bucket}")
private String bucket;
接下来是实际上传的代码
public Map<String, Object> uploadFile(InputStream inputStream, String suffix) {
// 生成随机的文件名
String fileName = UUID.randomUUID().toString().replaceAll("-", "") + suffix;
// 调用阿里云 oss把图片上传到 oss
OSS ossClient = new OSSClientBuilder().build(endPoint, accessKey, secretKey);
ossClient.putObject(bucket, fileName, inputStream);
ossClient.shutdown();
// 获取上传后的图片链接
// 后端将地址拼接一下,oss那里设为了公共读,阿里云屁事太多了
String picAddr = address + "/" + fileName;
// 前端所必须的返回格式
Map<String, Object> map = new HashMap<String, Object>() {{
put("url", picAddr);
put("success", 1);
put("message", "upload success!");
}};
return map;
}
先设置一个文件名,用uuid获取随机名称,防止重名。
利用阿里云oss提供的OSSClientBuilder
构建一个OSS类
,然后利用oss
上传图片,最后关闭。
获取上传图片链接那里,阿里云sdk提供了一个CallBack回调接口
,用于上传完后调用该接口。
该接口是使用POST请求
来请求你的服务器,然后把回调信息放入请求中返回。
由于使用本地调试,就没深入使用CallbBack
来回调,而是直接把阿里云OSS中的bucket
设为公共读,然后直接访问里面给出的文件地址,因为文件名称也都是UUID随机生成,所以也不用担心别人会读到其他文件