主要步骤如下:
前提是开通了阿里云OSS服务,然后;
1.引入依赖
2.获取关键参数,如endpoint,accessKeyId等,这个进入阿里云OSS控制台即可获取
3.建一个文件上传工具类
4.调用工具类,上传文件
1.pom.xml
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.8.3</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>
2.配置文件
注意:为了以后的拓展性,代码和配置解耦,我这里会专门建一个配置文件,然后在使用时直接从配置类中获取,而不是写死在java代码中。所以2,3两步不是必须的,作用只是规范的使用相关配置参数,若觉得麻烦,学习时,可直接在java代码中写死。
application.yml 这里是我定义的一些必要常量
#OSS
oos:
file:
endpoint: oss-cn-shanghai.aliyuncs.com 不同的服务器,地址不同
keyid: 去OSS控制台获取
keysecret: 去OSS控制台获取
bucketname: bucket命名
filehost: blog 文件路径,我这里是blog
3.使用 UploadController.java
package com.java4all.controller;
import com.java4all.utils.AliyunOSSUtil;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
@Controller
@RequestMapping("upload")
public class UploadController {
/**
* 文件上传
* @param file
*/
@RequestMapping(value = "uploadBlog",method = RequestMethod.POST)
public String uploadBlog(@RequestParam("file") MultipartFile file){
logger.info("============>文件上传");
try {
String filename = file.getOriginalFilename();
File newFile = new File(filename);
String uploadUrl = AliyunOSSUtil.upload(newFile);
}catch (Exception ex){
ex.printStackTrace();
}
return "index";
}
}
4.工具类 AliyunOSSUtil.java
package com.java4all.utils;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.CreateBucketRequest;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import com.java4all.config.ConstantProperties;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
public class AliyunOSSUtil {
@Value("${oos.file.endpoint}")
private static String endpoint;
@Value("${oos.file.keyid}")
private static String keyid;
@Value("${oos.file.keysecret}")
private static String keysecret;
@Value("${oos.file.bucketname}")
private static String bucketname;
@Value("${oos.file.filehost}")
private static String filehost;
public static String upload(File file){
//文件新路径
String fileName = file.getOriginalFilename();
try {
File newFile = new File(fileName);
FileOutputStream os = new FileOutputStream(newFile);
os.write(file.getBytes());
os.close();
file.transferTo(newFile);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = format.format(new Date());
OSSClient ossClient = new OSSClient(endpoint,keyid,keysecret);
//创建文件路径
String fileUrl = filehost+"/"+(dateStr + "/" + UUID.randomUUID().toString().replace("-","")+"-"+file.getName());
// 上传到阿里云
ossClient.putObject(new PutObjectRequest(bucketname, fileUrl, newFile));
if(null != result){
return fileUrl;
}
}catch (OSSException oe){
logger.error(oe.getMessage());
}catch (ClientException ce){
logger.error(ce.getMessage());
}finally {
//关闭
ossClient.shutdown();
}
return null;
}
}
5.页面 upload.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title>文件上传</title>
</head>
<body>
<form method="POST" enctype="multipart/form-data" action="/upload/uploadBlog">
<p>文件:<input type="file" name="file"/></p>
<p><input type="submit" value="上传" /></p>
</form>
</body>
</html>