文件上传的几种方案简述
服务器上传模式
用户上传数据到服务器,然后服务器再上传到阿里云OSS上
优点:安全性比较高,逻辑简单
缺点:会导致服务器承担一些不必要的压力,对服务器资源损耗大,也成为了服务器性能的瓶颈因素之一
直接上传模式
用户通过APP/浏览器直接通过账号密码上传文件到OSS服务器
优点:实现简单,不会给服务器带来巨大开销
缺点:不安全,每次访问时携带了秘钥(JS代码中)
策略上传模式
首先用户先给服务器发送上传请求,然后服务器给客户端颁发证书(根据上传策略),然后客户端携带token后上传文件到OSS
优点:安全也不会给服务器带来巨大开销
缺点:实现相对前者来说比较麻烦
使用阿里云OSS完成文件上传
阿里云服务开通与Bucket创建
登录阿里云后,对OSS服务开通
然后创建一个Bucket
具体的操作可以根据官方文档的操作指南来完成文档
在项目中运用
给项目中添加OSS依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.8.0</version>
</dependency>
这是官网完成简单文件上传的实例代码,可以看到Endpoint,accessKeyId,AccessKeySecret,bucket还有文件内容都是需要自己去指定的
// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 上传文件流。
InputStream inputStream = new FileInputStream("<yourlocalFile>");
ossClient.putObject("<yourBucketName>", "<yourObjectName>", inputStream);
// 关闭OSSClient。
ossClient.shutdown();
Endpoint相关信息,会根据地域不同而不同
Resource Access Management(资源访问管理)
创建子用户完成操作(为了安全考虑)
配置权限,因为此处要进行文件的上传,因此给FULL权限
对上面代码进行填充后进行测试
进入bucket管理台查看也是成功的
接下来就可以给项目的common工程导入上面依赖,然后创建一个util工具类,在使用的时候就直接一行代码使用,如下
OSSUploadService.upLoadFile(inputStream,"test");
这样就完成了阿里云对象存储服务!