|
@ -0,0 +1,165 @@
|
|
|
package com.yihu.jw.base.endpoint.common;
|
|
|
|
|
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
|
import com.yihu.fastdfs.FastDFSUtil;
|
|
|
import com.yihu.jw.base.util.ErrorCodeUtil;
|
|
|
import com.yihu.jw.exception.code.BaseErrorCode;
|
|
|
import com.yihu.jw.restmodel.iot.common.UploadVO;
|
|
|
import com.yihu.jw.restmodel.web.ObjEnvelop;
|
|
|
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
|
|
|
import com.yihu.jw.rm.base.BaseRequestMapping;
|
|
|
import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
import io.swagger.annotations.ApiParam;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import java.io.ByteArrayInputStream;
|
|
|
import java.io.InputStream;
|
|
|
import java.net.URLDecoder;
|
|
|
import java.util.Base64;
|
|
|
|
|
|
/**
|
|
|
* 文件上传不在微服务中处理
|
|
|
* @author yeshijie on 2017/12/7.
|
|
|
*/
|
|
|
@RestController
|
|
|
@RequestMapping(BaseRequestMapping.FileUpload.PREFIX)
|
|
|
@Api(tags = "文件上传相关操作", description = "文件上传相关操作")
|
|
|
public class FileUploadController extends EnvelopRestEndpoint {
|
|
|
|
|
|
@Autowired
|
|
|
private FastDFSUtil fastDFSHelper;
|
|
|
@Value("${fastDFS.fastdfs_file_url}")
|
|
|
private String fastdfs_file_url;
|
|
|
@Autowired
|
|
|
private ErrorCodeUtil errorCodeUtil;
|
|
|
|
|
|
@PostMapping(value = BaseRequestMapping.FileUpload.UPLOAD_STREAM_IMG)
|
|
|
@ApiOperation(value = "文件流上传图片", notes = "文件流上传图片")
|
|
|
public ObjEnvelop<UploadVO> uploadImg(@ApiParam(value = "文件", required = true)
|
|
|
@RequestParam(value = "file", required = true) MultipartFile file) throws Exception{
|
|
|
// 得到文件的完整名称 xxx.txt
|
|
|
String fullName = file.getOriginalFilename();
|
|
|
if(StringUtils.isBlank(fullName)){
|
|
|
return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.FileUpload.FAIL_UPLOAD_FORMAT), ObjEnvelop.class);
|
|
|
}
|
|
|
//得到文件类型
|
|
|
String fileType = fullName.substring(fullName.lastIndexOf(".") + 1).toLowerCase();
|
|
|
if(StringUtils.isBlank(fileType)||!"jpg,jpeg,png".contains(fileType)){
|
|
|
return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.FileUpload.FAIL_UPLOAD_FORMAT), ObjEnvelop.class);
|
|
|
}
|
|
|
|
|
|
long size = file.getSize();
|
|
|
long max = 5*1024*1024;
|
|
|
if(size>max){
|
|
|
String msg = String.format(BaseErrorCode.FileUpload.FAIL_FILE_SIZE, 5);
|
|
|
return failed(msg, ObjEnvelop.class);
|
|
|
}
|
|
|
|
|
|
String fileName = fullName.substring(0, fullName.lastIndexOf("."));
|
|
|
//上传到fastdfs
|
|
|
ObjectNode objectNode = fastDFSHelper.upload(file.getInputStream(), fileType, "");
|
|
|
//解析返回的objectNode
|
|
|
UploadVO uploadVO = new UploadVO();
|
|
|
uploadVO.setFileName(fileName);
|
|
|
uploadVO.setFileType(fileType);
|
|
|
uploadVO.setFullUri(objectNode.get("fileId").toString().replaceAll("\"", ""));
|
|
|
uploadVO.setFullUrl(fastdfs_file_url + objectNode.get("fileId").toString().replaceAll("\"", ""));
|
|
|
return success("上传成功", uploadVO);
|
|
|
}
|
|
|
|
|
|
|
|
|
@PostMapping(value = BaseRequestMapping.FileUpload.UPLOAD_STREAM_ATTACHMENT)
|
|
|
@ApiOperation(value = "文件流上传附件", notes = "文件流上传附件")
|
|
|
public ObjEnvelop<UploadVO> uploadAttachment(@ApiParam(value = "文件", required = true)
|
|
|
@RequestParam(value = "file", required = true) MultipartFile file) throws Exception{
|
|
|
// 得到文件的完整名称 xxx.txt
|
|
|
String fullName = file.getOriginalFilename();
|
|
|
if(StringUtils.isBlank(fullName)){
|
|
|
return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.FileUpload.FAIL_UPLOAD_FORMAT), ObjEnvelop.class);
|
|
|
}
|
|
|
//得到文件类型
|
|
|
String fileType = fullName.substring(fullName.lastIndexOf(".") + 1).toLowerCase();
|
|
|
if(StringUtils.isBlank(fileType)||!"doc、docx、pdf、xls、xlsx、jpg、jpeg、png".contains(fileType)){
|
|
|
return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.FileUpload.FAIL_UPLOAD_FORMAT), ObjEnvelop.class);
|
|
|
}
|
|
|
|
|
|
long size = file.getSize();
|
|
|
long max = 5*1024*1024;
|
|
|
if(size>max){
|
|
|
String msg = String.format(BaseErrorCode.FileUpload.FAIL_FILE_SIZE, 5);
|
|
|
return failed(msg, ObjEnvelop.class);
|
|
|
}
|
|
|
|
|
|
String fileName = fullName.substring(0, fullName.lastIndexOf("."));
|
|
|
//上传到fastdfs
|
|
|
ObjectNode objectNode = fastDFSHelper.upload(file.getInputStream(), fileType, "");
|
|
|
//解析返回的objectNode
|
|
|
UploadVO uploadVO = new UploadVO();
|
|
|
uploadVO.setFileName(fileName);
|
|
|
uploadVO.setFileType(fileType);
|
|
|
uploadVO.setFullUri(objectNode.get("fileId").toString().replaceAll("\"", ""));
|
|
|
uploadVO.setFullUrl(fastdfs_file_url + objectNode.get("fileId").toString().replaceAll("\"", ""));
|
|
|
return success("上传成功", uploadVO);
|
|
|
}
|
|
|
|
|
|
@PostMapping(value = BaseRequestMapping.FileUpload.UPLOAD_STREAM)
|
|
|
@ApiOperation(value = "文件流上传文件", notes = "文件流上传文件")
|
|
|
public ObjEnvelop<UploadVO> uploadStream(@ApiParam(value = "文件", required = true)
|
|
|
@RequestParam(value = "file", required = true) MultipartFile file) throws Exception{
|
|
|
// 得到文件的完整名称 xxx.txt
|
|
|
String fullName = file.getOriginalFilename();
|
|
|
//得到文件类型
|
|
|
String fileType = fullName.substring(fullName.lastIndexOf(".") + 1).toLowerCase();
|
|
|
String fileName = fullName.substring(0, fullName.lastIndexOf("."));
|
|
|
//上传到fastdfs
|
|
|
ObjectNode objectNode = fastDFSHelper.upload(file.getInputStream(), fileType, "");
|
|
|
//解析返回的objectNode
|
|
|
UploadVO uploadVO = new UploadVO();
|
|
|
uploadVO.setFileName(fileName);
|
|
|
uploadVO.setFileType(fileType);
|
|
|
uploadVO.setFullUri(objectNode.get("fileId").toString().replaceAll("\"", ""));
|
|
|
uploadVO.setFullUrl(fastdfs_file_url + objectNode.get("fileId").toString().replaceAll("\"", ""));
|
|
|
return success("上传成功", uploadVO);
|
|
|
}
|
|
|
|
|
|
@PostMapping(value = BaseRequestMapping.FileUpload.UPLOAD_STRING)
|
|
|
@ApiOperation(value = "base64上传图片",notes = "base64上传图片")
|
|
|
public ObjEnvelop<UploadVO> uploadImages(@ApiParam(name = "jsonData", value = "头像转化后的输入流")
|
|
|
@RequestBody String jsonData) throws Exception {
|
|
|
if(jsonData == null){
|
|
|
return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.FileUpload.FILE_NULL), ObjEnvelop.class);
|
|
|
}
|
|
|
String date = URLDecoder.decode(jsonData,"UTF-8");
|
|
|
String[] fileStreams = date.split(",");
|
|
|
String is = URLDecoder.decode(fileStreams[1],"UTF-8").replace(" ","+");
|
|
|
byte[] in = Base64.getDecoder().decode(is);
|
|
|
|
|
|
String pictureName = fileStreams[0].substring(0,fileStreams[0].length()-1);
|
|
|
String fileExtension = pictureName.substring(pictureName.lastIndexOf(".") + 1).toLowerCase();
|
|
|
String description = null;
|
|
|
if ((pictureName != null) && (pictureName.length() > 0)) {
|
|
|
int dot = pictureName.lastIndexOf('.');
|
|
|
if ((dot > -1) && (dot < (pictureName.length()))) {
|
|
|
description = pictureName.substring(0, dot);
|
|
|
}
|
|
|
}
|
|
|
InputStream inputStream = new ByteArrayInputStream(in);
|
|
|
ObjectNode objectNode = fastDFSHelper.upload(inputStream, "png", "");
|
|
|
String groupName = objectNode.get("groupName").toString();
|
|
|
String remoteFileName = objectNode.get("remoteFileName").toString();
|
|
|
//解析返回的objectNode
|
|
|
UploadVO uploadVO = new UploadVO();
|
|
|
uploadVO.setFileName(remoteFileName);
|
|
|
uploadVO.setFileType(groupName);
|
|
|
uploadVO.setFullUri(objectNode.get("fileId").toString().replaceAll("\"", ""));
|
|
|
uploadVO.setFullUrl(fastdfs_file_url + objectNode.get("fileId").toString().replaceAll("\"", ""));
|
|
|
//返回文件路径
|
|
|
return success("上传成功", uploadVO);
|
|
|
}
|
|
|
|
|
|
}
|