后台授权app上传文件到阿里云OSS

本文介绍如何使用阿里云OSS Java SDK配置并生成用于客户端直接上传文件的策略,包括设置访问密钥、过期时间及上传条件等。

1,pom

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

2,代码

String endpoint = Global.getConfig("aliyun.oss.endpoint");
        String accessId =  Global.getConfig("aliyun.oss.accessKeyId");
        String accessKey = Global.getConfig("aliyun.oss.accessKeySecret");
        String bucket =  Global.getConfig("aliyun.oss.bucketName");
         String dir = "sit/feedback";
         String host = "http://" + bucket + "." + endpoint;
         OSSClient client = new OSSClient(endpoint, accessId, accessKey);
             Calendar calendar = Calendar.getInstance();  
                 Date date = DateUtils.nowDate();
                calendar.setTime(date);  
                calendar.add(Calendar.DAY_OF_MONTH, 1);  
                Date expiration = calendar.getTime(); 
             PolicyConditions policyConds = new PolicyConditions();
             policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
             policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);

             String postPolicy = client.generatePostPolicy(expiration, policyConds);
             byte[] binaryData = postPolicy.getBytes("utf-8");
             String encodedPolicy = BinaryUtil.toBase64String(binaryData);
             String postSignature = client.calculatePostSignature(postPolicy);
             //json是个map,返回前端
             json.put("accessid", accessId);
             json.put("policy", encodedPolicy);
             json.put("signature", postSignature);
             json.put("dir", dir);
             json.put("host", host);
             json.put("expire", String.valueOf(expiration.getTime() / 1000));

### 若依框架集成阿里云OSS实现文件上传和存储 #### 创建阿里云OSS配置类 为了使若依框架能够顺利连接至阿里云OSS,需先创建一个用于保存OSS客户端实例以及相关属性的Java Bean。此Bean负责初始化OSSClient,并提供获取该实例的方法。 ```java @Configuration public class OssConfig { @Value("${aliyun.oss.endpoint}") private String endpoint; @Value("${aliyun.oss.accessKeyId}") private String accessKeyId; @Value("${aliyun.oss.accessKeySecret}") private String accessKeySecret; @Value("${aliyun.oss.bucketName}") private String bucketName; /** * 初始化OSSClient单例模式 */ public static OSS ossClient = null; @PostConstruct public void init() { try{ ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); }catch (Exception e){ log.error("Failed to initialize OSS client.",e); } } } ``` 上述代码展示了如何读取`application.yml`中的环境变量来构建OSS Client[^2]。 #### 修改Controller处理文件上传请求 接下来,在控制器层编写接收前端发送过来的文件流逻辑,利用之前定义好的OSS工具类完成实际的数据传输操作: ```java @RestController @RequestMapping("/common") public class CommonController { @Autowired private IOssService ossService; // 假设已存在对应的服务接口 @PostMapping(value="/uploadOSS") public AjaxResult upload(@RequestParam MultipartFile file) throws IOException { if(file.isEmpty()){ return AjaxResult.error("Please select a file first."); } String fileName = file.getOriginalFilename(); InputStream inputStream = file.getInputStream(); // 调用服务层方法执行具体业务逻辑 String resultUrl = ossService.uploadFile(inputStream,fileName); Map<String,Object> map=new HashMap<>(); map.put("url",resultUrl); return AjaxResult.success(map,"Upload successful"); } } ``` 这段程序片段说明了当接收到POST类型的HTTP请求时,会解析其中携带的二进制数据作为输入参数传递给后续流程[^4]。 #### 更新Vue组件适配新的API路径 最后一步是在前端部分调整原有的图片上传控件设置,使其指向新建立的支持OSS的对象存储接口地址。这通常涉及到编辑`.vue`文件内的JavaScript函数或模板标签。 ```javascript // 在 ImageUpload/index.vue 文件内找到相应位置做如下更改 data(){ return { ... uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/uploadOSS", ... }; }, methods:{ handler(response,file,fileList){ let item=file.name; this.$set(this.imageList,this.imageList.length,{name:item,url:item}); }, ... } ``` 以上改动确保了从前端提交上来的多媒体资源可以被正确转发到后台指定的位置进行下一步处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值