package com.example.demo.service;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.UUID;
@PropertySource(value = "classpath:ly-mp.properties")
@RestController
@RequestMapping("attachment")
public class AttachmentController {
@Value("${attachment.path}")
private String attachmentPath;
static HashMap<String, String> oss = new HashMap<>();
/**
* /attachment/upload
* @param multipartFile
* @param request
* @return
*/
@RequestMapping(value = "upload", method = RequestMethod.POST)
public JsonResult upload(@RequestPart("file") MultipartFile multipartFile, HttpServletRequest request) {
JsonResult jsonResult = new JsonResult();
try {
String fileId = UUID.randomUUID().toString().replace("-", "").toUpperCase();
String fileName = multipartFile.getOriginalFilename();
String frontPath = new SimpleDateFormat("yyyy\\MM\\dd").format(new Date()) + "\\" + fileId;
boolean mkdirs = new File(attachmentPath + "\\" + frontPath).mkdirs();
String relativeFileName = frontPath + "\\" + fileName;
String fullName = attachmentPath + "\\" + relativeFileName;
File file = new File(fullName);
multipartFile.transferTo(file);
oss.put(fileId, relativeFileName); //todo: 替换 fileId <-> relativeFileName 插入数据库
jsonResult.setCode(1);
jsonResult.setMessage("上传成功");
jsonResult.setData(fileId);
} catch (Exception exception) {
jsonResult.setCode(-1);
jsonResult.setError(exception.toString());
}
return jsonResult;
}
/**
* /attachment/download
* @param fileId
* @param request
* @param response
* @return
*/
@RequestMapping(value = "download", method = RequestMethod.GET)
public OptResult download(@RequestParam("fileId") String fileId, HttpServletRequest request,
HttpServletResponse response) {
OptResult result = new OptResult();
try {
// String relativeFileName = oss.get(fileId); //todo: 替换 通过 fileId 从数据库 查
String relativeFileName = wJBiz.findFileName(fileId);
if (StringHelper.IsEmptyOrNull(relativeFileName)) {
result.setResult("0");
result.setMsg("获取文件保存路径失败");
return result;
}
// String attachmentPath = "D:\\code";
String fullName = attachmentPath + File.separator + relativeFileName;
File file = new File(fullName);
FileInputStream fileInputStream = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
response.reset();
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition",
"attachment;filename=" + URLEncoder.encode(file.getName(), "utf-8"));
response.setHeader("Content-Length", String.valueOf(file.length()));
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());
byte[] bytes = new byte[1024];
int len;
while ((len = bufferedInputStream.read(bytes)) > 0) {
bufferedOutputStream.write(bytes, 0, len);
}
bufferedInputStream.close();
bufferedOutputStream.flush();
result.setResult("1");
result.setMsg("下载成功");
} catch (Exception exception) {
result.setResult("0");
result.setMsg(exception.getMessage());
}
return result;
}
**
带参数的上传附件
**
/**
* 附件上传--带参数
*
* @param multipartFile
* @param request
* @return
*/
@RequestMapping(value = "upload", method = RequestMethod.POST)
public OptResult upload(MultipartHttpServletRequest request) {
OptResult result = new OptResult();
try {
MultipartFile multipartFile = request.getFile("file");
String taskId = request.getParameter("taskId");
String fileId = UUID.randomUUID().toString().replace("-", "").toUpperCase();
String fileName = multipartFile.getOriginalFilename();
String frontPath = new SimpleDateFormat("yyyy\\MM\\dd").format(new Date()) + File.separator + fileId;
String relativeFileName = frontPath.replace("\\",File.separator) + File.separator + fileName;
String fullName = attachmentPath + File.separator + relativeFileName;
File file = new File(fullName);
boolean mkdirs = file.getParentFile().mkdirs();
multipartFile.transferTo(file);
// 插入数据库
HashMap<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("fileId", fileId);
paramMap.put("fileName", fileName);
paramMap.put("relativeFileName", relativeFileName);
paramMap.put("taskId", taskId);
wJBiz.insertAttachmentMgr(paramMap);
result.setResult("1");
result.setMsg(fileId);
} catch (Exception exception) {
result.setResult("0");
result.setMsg(exception.getMessage());
}
return result;
}