#maven 导入的包
<!--aliyunOSS-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
#配置文件
#OSS
spring.file.endpoint=https://oss-xxxxx.aliyuncs.com
spring.file.keyid=xxxx
spring.file.keysecret=xxxx
spring.file.bucketname1=xxxx
spring.file.filehost=https://xxxx-xxxx.aliyuncs.com/
#配置文件的读取
package com.darkcore.cms.utils.aliyunOSS;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* Created by yangke on 2018/6/14.
* 读取配置参数
*/
@Component
public class ConstantProperties implements InitializingBean {
@Value("${spring.file.endpoint}")
private String spring_file_endpoint;
@Value("${spring.file.keyid}")
private String spring_file_keyid;
@Value("${spring.file.keysecret}")
private String spring_file_keysecret;
@Value("${spring.file.bucketname1}")
private String spring_file_bucketname1;
@Value("${spring.file.filehost}")
private String spring_file_filehost;
public static String SPRING_FILE_ENDPOINT;
public static String SPRING_FILE_ACCESS_KEY_ID;
public static String SPRING_FILE_ACCESS_KEY_SECRET;
public static String SPRING_FILE_BUCKET_NAME1;
public static String SPRING_FILE_FILE_HOST;
@Override
public void afterPropertiesSet() throws Exception {
SPRING_FILE_ENDPOINT = spring_file_endpoint;
SPRING_FILE_ACCESS_KEY_ID = spring_file_keyid;
SPRING_FILE_ACCESS_KEY_SECRET = spring_file_keysecret;
SPRING_FILE_BUCKET_NAME1 = spring_file_bucketname1;
SPRING_FILE_FILE_HOST = spring_file_filehost;
}
}
#工具类
package com.darkcore.cms.utils.aliyunOSS;
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 java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
public class AliyunOSSUtil {
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(AliyunOSSUtil.class);
public static String upload(File file){
//logger.info("=========>OSS文件上传开始:"+file.getName());
String endpoint=ConstantProperties.SPRING_FILE_ENDPOINT;
String accessKeyId=ConstantProperties.SPRING_FILE_ACCESS_KEY_ID;
String accessKeySecret=ConstantProperties.SPRING_FILE_ACCESS_KEY_SECRET;
String bucketName=ConstantProperties.SPRING_FILE_BUCKET_NAME1;
String fileHost=ConstantProperties.SPRING_FILE_FILE_HOST;
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 = dateStr + "/" + UUID.randomUUID().toString().replace("-","")+"-"+file.getName();
//上传文件
PutObjectResult result = ossClient.putObject(new PutObjectRequest(bucketName, fileUrl, file));
//设置权限 这里是公开读
ossClient.setBucketAcl(bucketName,CannedAccessControlList.PublicRead);
if(null != result){
logger.info("==========>OSS文件上传成功,OSS地址:"+fileUrl);
return fileHost+fileUrl;
}
}catch (OSSException oe){
logger.error(oe.getMessage());
}catch (ClientException ce){
logger.error(ce.getMessage());
}finally {
//关闭
ossClient.shutdown();
}
return null;
}
}
#controller
package com.darkcore.cms.controller;
import com.darkcore.cms.common.Result;
import com.darkcore.cms.common.ResultEnum;
import com.darkcore.cms.common.ResultUtil;
import com.darkcore.cms.utils.aliyunOSS.AliyunOSSUtil;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
@RestController
@RequestMapping(value="/fileUpload")
public class FileUploadController {
private static final Logger log = LoggerFactory.getLogger(FileUploadController.class);
/**
* 文件上传
* @param file
*/
@ApiOperation(value="文件上传到阿里云OSS", notes="文件上传到阿里云OSS")
@ApiImplicitParams({
@ApiImplicitParam(name = "file", value = "file", required = true, dataType = "MultipartFile", paramType = "path"),
})
@RequestMapping(value = "",method = RequestMethod.POST)
public Result<String> uploadFile(MultipartFile file){
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 url = AliyunOSSUtil.upload(newFile);
newFile.delete();
return ResultUtil.success(url);
}
}
}catch (Exception e){
log.error(e.getMessage());
return ResultUtil.error(ResultEnum.ERROR.getCode(),e.getMessage());
}
return ResultUtil.error(ResultEnum.ERROR.getCode(),"文件为空");
}
}
#测试类
package com.darkcore;
import com.darkcore.cms.AppStart;
import com.darkcore.cms.utils.aliyunOSS.AliyunOSSUtil;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.io.File;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = AppStart.class)
public class FileUploadTest {
@Test
public void fileUploadTest(){
File file = new File("/Users/yk/Desktop/exxc_eshi.png");
System.out.println(AliyunOSSUtil.upload(file));
}
}