使用JavaSDK简单上传文件到阿里云OSS服务中
进入参考文档
复制代码到项目test文件,自动生成demo.class文件
两处爆红错误
解决办法:
测试
mvn dependency:tree | findstr aliyun-sdk-oss
从日志来看,项目确实引入了 aliyun-sdk-oss
,但版本是 3.10.2(较旧),可能需要 3.16.1 或更高版本来支持 SignVersion.V4
。以下是解决方案:
强制使用最新版 OSS SDK
在您的 pom.xml 中,明确指定最新版本:
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.16.1</version><!-- 如果有其他依赖传递了旧版本,添加排除 --><exclusions><exclusion><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId></exclusion></exclusions>
</dependency>
然后编译一下
配置凭证三步
OSS Java SDK快速入门_对象存储(OSS)-阿里云帮助中心
1. AccessKey:
2.配置环境
以上是错误的
要将自己的key_Id和key_secret输上
setx OSS_ACCESS_KEY_ID LTAI5t7f5dWpnaHKTSqn9Pvo
setx OSS_ACCESS_KEY_SECRET IHh4xf0U6cwCt8SFcOldl54TN2cQtz
一定记得配置完要重启,否则不生效
修改代码设置
运行图片就上传了
AliOSSUtils
package com.sky.utils;import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;/*** 阿里云 OSS 工具类*/
public class AliOSSUtils {private String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";private String accessKeyId = "LTAI4GCH1vX6DKqJWxd6nEuW";private String accessKeySecret = "yBshYweHOpqDuhCArrVHwIiBKpyqSL";private String bucketName = "web-framework";/*** 实现上传图片到OSS*/public String upload(MultipartFile multipartFile) throws IOException {// 获取上传的文件的输入流InputStream inputStream = multipartFile.getInputStream();// 避免文件覆盖String fileName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss")) + multipartFile.getOriginalFilename();//上传文件到 OSSOSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);ossClient.putObject(bucketName, fileName, inputStream);//文件访问路径String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;// 关闭ossClientossClient.shutdown();return url;// 把上传到oss的路径返回}}
uploadController
package com.sky.controller.admin;import com.sky.result.Result;
import com.sky.utils.AliOSSUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;@RestController
public class UploadController {@Autowiredprivate AliOSSUtils aliOSSUtils;@PostMapping("/upload")public Result upload(MultipartFile image) throws IOException{//把图片直接上传到阿里的oss服务中String url = aliOSSUtils.upload(image);return Result.success(url);}
}