上传文件- 阿里云oss对象存储
阿里云开通对象存储步骤不多介绍, 网上都有教程
直接上代码
引入pom文件
<!--阿里云oss对象存储-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
@RestController
@RequestMapping("file")
public class SignController {
@Autowired
OSSClientManager ossClientManager;
//Endpoint(地域节点)
private final static String ENDPOINT = "oss-cn-beijing.aliyuncs.com";
//accessKey
private final static String ACCESS_KEY_ID = "XXXXXXXXXXXXXX";
//secretKey
private final static String ACCESS_KEY_SECRET = "XXXXXXXXXXXXXX";
// Bucket 域名
private static final String OUTURL = "shkdev.oss-cn-beijing.aliyuncs.com";
//Bucket名称 (Bucket 命名规范:1)只能包括小写字母,数字和短横线(-);2)必须以小写字母或者数字开头;3)长度必须在 3-63 字节之间。)
private static final String BUCKET_NAME = "shkdev";
@RequestMapping(value = "", method = RequestMethod.POST)
public IMGResponseInfo uploader(@RequestParam("file") MultipartFile[] files, HttpServletRequest request, HttpServletResponse response) {
// 定义上传路径
String pathHttp = "";
String fileName = "", fileExtend = "";
try {
String app = request.getParameter("app");
String AllowFileType = ".xls|.xlsx|.doc|.docx|.ppt|.pptx|.zip|.rar|.7z|.jpg|.jpeg|.gif|.bmp|.png|.eml|.dwg|.dwt|.dws|.dwf|.pdf|.txt|.swf|.mp4|.vsd|.vsdx|.txt|.jpeg";
long AllowFileLength = 1024 * 1024 * 300; // 上传上限为300M
String resultURL;
for (MultipartFile file : files) {
fileExtend = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")).toLowerCase();
fileName = MakeFileName() + fileExtend;
if (!FileValidate(fileExtend, AllowFileType)) {
return new IMGResponseInfo().error("错误的文件格式!"); // error_filetype
}
if (file.getSize() > AllowFileLength) {
return new IMGResponseInfo().error("文件最大为300M!"); // error_exceedlimit
}
String datadirectory = new java.text.SimpleDateFormat("yyyy/MM/dd").format(new java.util.Date()) + "/";
pathHttp += "contract/" + datadirectory;
// 上传文件保存(阿里云oss对象存储)
resultURL = this.aliputObject(pathHttp,file,fileName);
IMGResponseInfo contractAttachmentResult = new IMGResponseInfo().success(resultURL);
contractAttachmentResult.setMsg(file.getOriginalFilename());
return contractAttachmentResult;
}
return new IMGResponseInfo().error("未知的错误");
} catch (Exception e) {
//throw new RuntimeException(e);
return new IMGResponseInfo().error(e.getMessage());
}
}
/**
* 上传阿里云oss对象存储
* @param path
* @param file
* @param objectName
* @return
*/
public String aliputObject(String path, MultipartFile file, String objectName) {
OSS ossClient = null;
try {
ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
InputStream inputStream = file.getInputStream();
// 创建上传Object的Metadata
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(inputStream.available());
objectMetadata.setCacheControl("max-age=315360000");
objectMetadata.setContentType(getContentType(file, objectName));
objectMetadata.setContentDisposition("inline;filename=" + file.getOriginalFilename());
ossClient.putObject(BUCKET_NAME, objectName, inputStream, objectMetadata);
} catch (Exception e) {
e.printStackTrace();
e.getMessage();
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
String endPath = "/" + path + objectName;
return "https://" + OUTURL + endPath;
}
private String getContentType(MultipartFile file, String objectName) {
String contentType = file.getContentType();
if (contentType != null && contentType.contains("image")) {
String FileNameExtension = objectName.substring(objectName.lastIndexOf("."));
if (FileNameExtension.equalsIgnoreCase(".bmp")) {
return "image/bmp";
}
if (FileNameExtension.equalsIgnoreCase(".gif")) {
return "image/gif";
}
if (FileNameExtension.equalsIgnoreCase(".jpeg") ||
FileNameExtension.equalsIgnoreCase(".jpg") ||
FileNameExtension.equalsIgnoreCase(".png")
) {
return "image/jpg";
}
return "image/jpg";
} else {
return contentType;
}
}
/**
* 生成文件名称
* @return
*/
private String MakeFileName() {
java.util.Random ran = new java.util.Random();
int intstr = (int) ran.nextInt(9);
return new java.text.SimpleDateFormat("yyyyMMddHHmmss").format(new java.util.Date()) + (new Integer(intstr)).toString();
}
/**
* 检查文件格式
* @param fileExt 文件格式
* @return
*/
private boolean FileValidate(String fileExt, String allowType) {
boolean FileGood = false;
String[] Exts = allowType.split("[|]", -1);
for (String FileType : Exts) {
if (fileExt.equals(FileType)) {
FileGood = true;
break;
}
}
return FileGood;
}
public class IMGResponseInfo {
private String code;
private String msg;
private String file;
public IMGResponseInfo() {
}
public IMGResponseInfo(String code, String msg, String file) {
super();
this.code = code;
this.msg = msg;
this.file = file;
}
public IMGResponseInfo error(String msg) {
this.code = "0";
this.msg = msg;
this.file = "";
return this;
}
public IMGResponseInfo success(String file) {
this.code = "1";
this.msg = "successfully";
this.file = file;
return this;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getFile() {
return file;
}
public void setFile(String file) {
this.file = file;
}
}
}