1、安装SDK
您可以通过以下三种方式安装SDK。
在Maven项目中加入依赖项(推荐方式)
在Maven工程中使用OSS Java SDK,只需在pom.xml中加入相应依赖即可。以3.10.2版本为例,在<dependencies>中加入如下内容:
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
如果使用的是Java 9及以上的版本,则需要添加jaxb相关依赖。添加jaxb相关依赖示例代码如下:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.3</version>
</dependency>
2、新建OSSClient
OSSClient是OSS的Java客户端,用于管理存储空间和文件等OSS资源。
新建OSSClient时,需要指定Endpoint。
public class UploadUtil {
private static String endpoint = "oss-cn-hangzhou.aliyuncs.com";
private static String accessKeyId = "#";
private static String accessKeySecret = "#";
private static String bucket = "#";
public static String uploadFile(MultipartFile file) throws IOException {
String filename = null;
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId,
accessKeySecret);
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径
中上传文件流。
try( InputStream inputStream = file.getInputStream();
){
//获取上传的文件名
filename = getName(file);
// 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如
exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。
ossClient.putObject(bucket, filename, inputStream);
}catch (Exception e){
e.printStackTrace();
}finally {
if(ossClient != null){
ossClient.shutdown();
}
}
return getUrl(filename);
}
private static String getName(MultipartFile file){
LocalDate localDate = LocalDate.now();
String originalName = file.getOriginalFilename();
//随即生成一个文件名
String randomName = UUID.randomUUID().toString().
replace("-", "") +
originalName.substring(originalName.indexOf("."));
//创建类似 2020/11/2/.. 文件
return localDate.getYear() + "/" + localDate.getMonth() + "/" +
localDate.getDayOfMonth() + "/" + randomName;
}
private static String getUrl(String name){
return "https://" + bucket + "." + endpoint + "/" + name;
}
}
3、Cotroller控制器
下面使用了一个MultipartFile对象,需要导入几个包
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.22.RELEASE</version>
</dependency>
@RequestMapping("/uploadImg")
public Result uploadImg(MultipartFile myFile) throws IOException {
String url = UploadUtil.uploadFile(myFile);
if(url != null){
return Result.success("上传成功!", url);
}else {
return Result.error("上传失败!");
}
}
4、html代码
html就简单的使用下表单。
<html>
<head>
<meta charset="UTF-8"/>
<title>Title</title>
</head>
<body>
<form action="upload/uploadImg" enctype="multipart/form-data" method="post">
<input type="file" name="myFile"/>
<input type="submit"/>
</form>
</body>
</html>