首先,先构建一个springboot项目
在pom文件引入阿里云的依赖,lombok
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
简单的写一下前端代码,一个上传按钮和一个图片标签
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<style>
</style>
<body>
<img th:each="fileName : ${fileNames}" th:src="${fileName}" alt="" width="300px">
<form action="fileUpload" method="post" enctype="multipart/form-data">
<input type="file" name="fileName">
<input type="submit">
</form>
</body>
</html>
创建service层,创建AliyunOSSUtilService类
package com.example.demo.service;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;
@Service
@Slf4j
public class AliyunOSSUtilService {
/**
* 这五个分别是什么下面会说
*/
public static final String endpoint = "oss-cn-beijing.aliyuncs.com";
public static final String accessKeyId = "9999999999999999999";
public static final String accessKeySecret = "9999999999999999999";
public static final String bucketName = "edu-22021";
public static final String fileHost = "2021/cff";
private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
/**
* 上传
* @param file
* @return
*/
public String upload(File file){
log.info("=========>OSS文件上传开始:"+file.getName());
// String fileHost=constantProperties.getFilehost();
System.out.println(endpoint+"endpoint");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = format.format(new Date());
if(null == file){
return null;
}
OSSClient ossClient = new OSSClient(endpoint,accessKeyId,accessKeySecret);
try {
//容器不存在,就创建
if(! ossClient.doesBucketExist(bucketName)){
ossClient.createBucket(bucketName);
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
ossClient.createBucket(createBucketRequest);
}
//创建文件路径
String fileUrl = fileHost+"/"+(dateStr + "/" + UUID.randomUUID().toString().replace("-","")+"-"+file.getName());
//上传文件
PutObjectResult result = ossClient.putObject(new PutObjectRequest(bucketName, fileUrl, file));
//设置权限 这里是公开读
ossClient.setBucketAcl(bucketName,CannedAccessControlList.PublicRead);
if(null != result){
log.info("==========>OSS文件上传成功,OSS地址:"+fileUrl);
return fileUrl;
}
}catch (OSSException oe){
log.error(oe.getMessage());
}catch (ClientException ce){
log.error(ce.getMessage());
}finally {
//关闭
ossClient.shutdown();
}
return null;
}
/**
*
* @desc 查看文件列表
*/
public List<OSSObjectSummary> getObjectList() {
OSS ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 设置最大个数。
final int maxKeys = 200;
// 列举文件。
ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
listObjectsRequest.setPrefix(fileHost+"/");
ObjectListing objectListing = ossClient.listObjects(listObjectsRequest.withMaxKeys(maxKeys));
List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
return sums;
}
}
public static final String endpoint = "oss-cn-beijing.aliyuncs.com"; public static final String accessKeyId = "9999999999999999999"; public static final String accessKeySecret = "9999999999999999999"; public static final String bucketName = "edu-22021"; public static final String fileHost = "2021/cff";
下面我用5张图告诉你去哪里找
endpoint
accessKeyId
accessKeySecret
fileHost 这个就是你文件夹,比如我想要把上传的图片放在cff文件夹下
创建FileController 类
package com.example.demo.controller;
import com.aliyun.oss.model.OSSObjectSummary;
import com.example.demo.service.AliyunOSSUtilService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Slf4j
@Controller
public class FileController {
@Autowired
private AliyunOSSUtilService aliyunOSSUtil;
/**
* 查看所有图片
*
*/
@RequestMapping("/getAllPic")
public String getAllPic(Map<String, Object> map){
// Hashtable hashtable = new Hashtable();
// 显示图片
ArrayList<String> listStr = new ArrayList<>();
List<OSSObjectSummary> list = aliyunOSSUtil.getObjectList();
list.forEach(item -> {
// 这个下面会讲自己的该怎么写
listStr.add("https://edu-22021.oss-cn-beijing.aliyuncs.com/"+item.getKey());
}
);
map.put("fileNames", listStr);
return "file/index.html";
}
/**
*
* @param file 要上传的文件
* @return
*/
@RequestMapping("/fileUpload")
public String upload(@RequestParam("fileName") MultipartFile file, Map<String, Object> map){
try {
if(null != file){
String filename = file.getOriginalFilename();
if(!"".equals(filename.trim())){
File newFile = new File(filename);
FileOutputStream os = new FileOutputStream(newFile);
os.write(file.getBytes());
os.close();
file.transferTo(newFile);
//上传到OSS
String uploadUrl = aliyunOSSUtil.upload(newFile);
System.out.println(uploadUrl);
}
}
}catch (Exception ex){
ex.printStackTrace();
}
return "forward:getAllPic";
}
}
listStr.add(“https://edu-22021.oss-cn-beijing.aliyuncs.com/”+item.getKey());
这个是拼接的,前面那一小段其实是在这里copy,随便找张你存好的图
根据url可以访问这张图
然后运行项目,效果如下:
没错,确实很丑,但是看得过去。上传图片
嘿嘿,报错了吧,
org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field fileName exceeds its maximum permitted size of 1048576 bytes.
默认会有大小限制的,很好解决,配置文件加两句
spring.servlet.multipart.max-file-size=128MB
spring.servlet.multipart.max-request-size=128MB
一气呵成,千万别关注我