阿里云OSS上传文件

阿里云OSS上传文件

阿里云官网内搜:对象存储OSS
一、开通(套餐或者流量计费)文件少就流量计费,不太贵,点击立即开通
二、创建Bucket(创建桶,类似目录的概念,创建后无法更改除非删除)

以上就配置完毕,此时就可以在此页面手动上传删除文件了

(另外账号密码都可以在这里更改)

二、开发思路

为什么不直接用js从前端上传文件到阿里云呢?因为账号密码可能暴露。

(如果考虑文件太大占用后端服务性能,其实可以前端只从服务器拿一个账号密码授权,然后再直接从前端上传到阿里云)

三、后端开发

1.阿里云官网内搜:对象存储OSS

2.引入SDK依赖

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.15.1</version>
</dependency>

4.提前开通子账号

1.前提是公司已经开通了OSS账号(因为代码里要用账号密码。但是开通后生成的是主账号,为防止删桶跑路,可以再开出子账号,设定相关权限供程序员使用)

同理,再给一个AliyunSTSAssumeRoleAccess权限。

五、就可以根据示例代码创建Bucket桶(存储空间)、上传文件、下载文件

1.创建桶

代码.创建桶的示例代码里注释掉的代码和手动在页面创建桶是对应的,可以根据需要释放相关代码。

对于创建Bucket桶(存储空间)的步骤,选中代码这里是通过环境变量配置的,也可以把代码改成下一张图片的使用accessKeyId和accessKeySecret的方式

创建成功后就能在页面的桶列表里找到新创建的桶了

2.上传文件(文件名最好唯一名称,如加时间戳截取)

如果需要返回上传成功的文件路径供用户查看,则这样拼接一下字符串即可

3.删除文件

删除时文件名不应该写死的,应该是从保存的路径里截取的:

六、Java代码和Vue代码

public class AnnexUtils {

    public static String upload(MultipartFile file){

        // Endpoint以(上海)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-shanghai.aliyuncs.com";
        // 使用代码嵌入的RAM用户的访问密钥配置访问凭证
        String accessKeyId = "xxxxxxx";
        String accessKeySecret = "xxxxxxx";
        CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret);
        // 填写Bucket名称.
        String bucketName = "anmuzidonghua";
        //保存的目录
        String module ="word/anmu";
        //文件名
        String filePath = file.getOriginalFilename();
        //填写Object完整路径,拼接目录+时间戳+UUID+后缀扩展名
        String objectName = module+"/"+System.currentTimeMillis()+"_"
                + UUID.randomUUID().toString().substring(0,6)+
                filePath.substring(filePath.lastIndexOf("."));
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
           // InputStream inputStream = new FileInputStream(filePath);
            InputStream inputStream = file.getInputStream();
            // 创建PutObjectRequest对象。
            //参数1:桶名,参数2:保存到oss的路径+文件名,参数3:要上传的文件
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
            //设置该属性可以返回response,不设置返回的response为空
            putObjectRequest.setProcess("true");
            // 创建PutObject请求。
            PutObjectResult result = ossClient.putObject(putObjectRequest);
            // 可以查看状态码,200是成功;
            System.out.println(result.getResponse().getStatusCode());
            //拼接上传后的文件路径
            //https://sh220828-srb.oss-cn-shanghai.aliyuncs.com/imgs/2023/01/12/1673507930341_4209ba.jpg
            String path  =  "https://"+ bucketName+".oss-cn-shanghai.aliyuncs.com/"+objectName;
            return path;
        } catch (Exception ce) {
            System.out.println("Error Message:" + ce.getMessage());
            return "上传失败啦";
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
  }
}
            <el-upload
              ref="upload"
              :action="uploadUrl"
              :headers="headers"
              :multiple="false"
              :file-list="fileList"
              :on-success="handleSuccess"
              :on-error="handleError"
              class="upload-demo"
              style="margin-left: 20px;"
            >
              <el-button size="small" type="primary">上传附件</el-button>
              <div slot="tip" class="el-upload__tip">只能上传不超过500kb的文件</div>
            </el-upload>



 export default {
    data() {
      return {
        uploadUrl: '/dev-api/system/demand/upload', 
        headers: {},
        fileList: []
      }
    }
 }



 methods: {
      handleSuccess(response, file, fileList) {
        // 处理上传附件成功的操作
        console.log('上传成功', response, file, fileList);
      },
      handleError(error, file, fileList) {
        // 处理上传失败的操作
        console.log('上传失败', error, file, fileList);
      },
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值