集成aliyun oss
结构如下:
pom.xml
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- aliyun bigen --> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>${aliyun.oss.version}</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <!-- aliyun end --> <!-- lombok bigen --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </dependency> <!-- lombok end -->
application.yml
aliyun:
file:
endpoint: http://oss-cn-hangzhou.aliyuncs.com
accessKeyId: *******************
accessKeySecret: *******************
bucketName: tzqimg
folder : test
webUrl: https://tzqimg.oss-cn-hangzhou.aliyuncs.com
spring:
servlet:
multipart:
max-file-size: 1MB
max-request-size: 1MB
package com.aliyun.we; import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; @Data @Component @Configuration public class ConstantConfig { @Value("${aliyun.file.endpoint}") private String endpoint; @Value("${aliyun.file.accessKeyId}") private String accessKeyId; @Value("${aliyun.file.accessKeySecret}") private String accessKeySecret; @Value("${aliyun.file.folder}") private String folder; @Value("${aliyun.file.bucketName}") private String bucketName; @Value("${aliyun.file.webUrl}") private String webUrl; }
package com.aliyun.we; import lombok.Data; import java.io.Serializable; /** * @description: 文件上传信息存储类 * @author: tzq * @create 2019-08-06 */ @Data public class FileDTO implements Serializable { /** * 文件大小 */ private Long fileSize; /** * 文件的绝对路径 */ private String fileAPUrl; /** * 文件的web访问地址 */ private String webUrl; /** * 文件后缀 */ private String fileSuffix; /** * 存储的bucket */ private String fileBucket; /** * 原文件名 */ private String oldFileName; /** * 存储的文件夹 */ private String folder; public FileDTO() { } public FileDTO(Long fileSize, String fileAPUrl, String webUrl, String fileSuffix, String fileBucket, String oldFileName, String folder) { this.fileSize = fileSize; this.fileAPUrl = fileAPUrl; this.webUrl = webUrl; this.fileSuffix = fileSuffix; this.fileBucket = fileBucket; this.oldFileName = oldFileName; this.folder = folder; } }
package com.aliyun.we; 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 org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import java.util.UUID; @Component public class AliyunOSSUtil { @Autowired private ConstantConfig constantConfig; private static final org.slf4j.Logger logger = LoggerFactory.getLogger(AliyunOSSUtil.class); /** 上传文件*/ public FileDTO upLoad(File file){ logger.info("------OSS文件上传开始--------"+file.getName()); String endpoint=constantConfig.getEndpoint(); System.out.println("获取到的Point为:"+endpoint); String accessKeyId=constantConfig.getAccessKeyId(); String accessKeySecret=constantConfig.getAccessKeySecret(); String bucketName=constantConfig.getBucketName(); String fileHost=constantConfig.getFolder(); SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd"); String dateStr=format.format(new Date()); String uuid = UUID.randomUUID().toString().replace("-", ""); String suffix = file.getName().substring(file.getName().lastIndexOf(".") + 1); // 判断文件 if(file==null){ return null; } OSSClient client=new OSSClient(endpoint, accessKeyId, accessKeySecret); try { // 判断容器是否存在,不存在就创建 if (!client.doesBucketExist(bucketName)) { client.createBucket(bucketName); CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName); createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead); client.createBucket(createBucketRequest); } // 设置文件路径和名称 String fileUrl = fileHost + "/" + (dateStr + "/" + uuid ) + "-" + file.getName(); // 设置权限(公开读) client.setBucketAcl(bucketName, CannedAccessControlList.PublicRead); // 上传文件 PutObjectResult result = client.putObject(new PutObjectRequest(bucketName, fileUrl, file)); if (result != null) { System.out.println(result); logger.info("------OSS文件上传成功------" + fileUrl); return new FileDTO( file.length(),//文件大小 fileUrl,//文件的绝对路径 constantConfig.getWebUrl() +"/"+ fileUrl,//文件的web访问地址 suffix,//文件后缀 "",//存储的bucket bucketName,//原文件名 fileHost//存储的文件夹 ); } }catch (OSSException oe){ logger.error(oe.getMessage()); }catch (ClientException ce){ logger.error(ce.getErrorMessage()); }finally{ if(client!=null){ client.shutdown(); } } return null; } }
package com.aliyun.we; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.FileOutputStream; @RestController public class UpLoadController { private final Logger logger = LoggerFactory.getLogger(getClass()); @Autowired private AliyunOSSUtil aliyunOSSUtil; /** 文件上传*/ @RequestMapping(value = "/uploadFile") public FileDTO uploadBlog(@RequestParam("file") MultipartFile file) { logger.info("文件上传"); String filename = file.getOriginalFilename(); System.out.println(filename); try { // 判断文件 if (file!=null) { if (!"".equals(filename.trim())) { File newFile = new File(filename); FileOutputStream os = new FileOutputStream(newFile); os.write(file.getBytes()); os.close(); file.transferTo(newFile); // 上传到OSS return aliyunOSSUtil.upLoad(newFile); } } } catch (Exception ex) { ex.printStackTrace(); } return null; } }
postman 返回
{
"fileSize": 190280,
"fileAPUrl": "test/2019-08-06/5ea96123bc3f4fa0a30560ae6aa2f285-WX20190806-151311@2x.png",
"webUrl": "https://tzqimg.oss-cn-hangzhou.aliyuncs.com/test/2019-08-06/5ea96123bc3f4fa0a30560ae6aa2f285-WX20190806-151311@2x.png",
"fileSuffix": "png",
"fileBucket": "",
"oldFileName": "tzqimg",
"folder": "test"
}