import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.*;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.green.admin.common.annotations.Anonymous;
import com.green.admin.common.responses.Response;
import com.green.admin.common.utils.file.FileUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
@Slf4j
@Api(tags = "附件")
@RestController
public class FileController {
@Anonymous
@ApiOperation("上传")
@PostMapping("/uploadFile")
public Response<Map<String, Object>> uploadFile(@RequestParam("file") MultipartFile file, HttpServletRequest request)
throws IllegalStateException, IOException {
Map<String, Object> mp = new HashMap<String, Object>();
// fileName.transferTo(new File("D:\\upload\\"+fileName.getOriginalFilename()));
// String filePath = "/images/";
String fileName = file.getOriginalFilename();
String extendsName=fileName.substring(fileName.lastIndexOf("."));
String newFileName= UUID.randomUUID().toString()+extendsName;
String sysPath = System.getProperty("user.dir");
// String filePath = request.getSession().getServletContext().getRealPath("imgupload/");
String filePath = sysPath + "\\image\\";
log.info("filePath--->"+filePath);
try {
FileUtil.uploadFile(file.getBytes(), filePath, newFileName);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
// File dest = new File(filePath+fileName.getOriginalFilename());
// fileName.transferTo(dest);
/** * 下面两种有相同的作用 */
// System.out.println("==相对路径:同级目录下的配置文件>"+ FileController.class.getResource("application.yml"));
// System.out.println("==相对路径:相对根目录的下下一级目录下的配置文件>"+FileController.class.getClassLoader().getResource("src/main/resources/application.yml"));
mp.put("msg", "upload success");
mp.put("fileName", newFileName);
return Response.ok(mp);
}
@Anonymous
@ApiOperation("下载")
@GetMapping("/download")
public Response downLoad(@RequestParam("fileName") String fileName, HttpServletResponse response,
HttpServletRequest request) throws UnsupportedEncodingException {
// String filePath = request.getSession().getServletContext().getRealPath("imgupload/");
String sysPath = System.getProperty("user.dir");
String filePath = sysPath + "\\image\\";
log.info("filePath--->"+filePath);
System.out.println("fileName:" + fileName);
System.out.println("----------file download---" + filePath + fileName);
File file = new File(filePath + fileName);
if (file.exists()) { // 判断文件父目录是否存在
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition",
"attachment;fileName=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
byte[] buffer = new byte[1024];
FileInputStream fis = null; // 文件输入流
BufferedInputStream bis = null;
OutputStream os = null; // 输出流
try {
os = response.getOutputStream();
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
int i = bis.read(buffer);
while (i != -1) {
os.write(buffer);
i = bis.read(buffer);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bis.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return Response.ok();
}
@ApiOperation("批量上传")
@PostMapping("/multiUpload")
public String multiUpload(HttpServletRequest request) {
List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");
String sysPath = System.getProperty("user.dir");
String filePath = sysPath + "\\image\\";
log.info("filePath--->"+filePath);
for (int i = 0; i < files.size(); i++) {
MultipartFile file = files.get(i);
if (file.isEmpty()) {
return "上传第" + (i++) + "个文件失败";
}
String fileName = file.getOriginalFilename();
File dest = new File(filePath + fileName);
// file.transferTo(dest);
try {
FileUtil.uploadFile(file.getBytes(), filePath, fileName);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
System.out.println(e);
return "上传第" + (i++) + "个文件失败";
}
System.out.println("第" + (i + 1) + "个文件上传成功");
}
return "上传成功";
}
@GetMapping("/files")
@Anonymous
public Map<String, List<FileVo>> getfiles(){
List<FileVo> list = new ArrayList<>();
String path = "E:\\iems";
File file = new File(path);
List<HashMap<String,String>> fileList = new ArrayList<>();
getFile( file.listFiles(), fileList);
String temp="";
if(fileList!=null && fileList.size()>0) {
for (HashMap<String, String> map : fileList) {
Set<Map.Entry<String, String>> entries = map.entrySet();
Map<String, Object> m = new HashMap<>();
for (Map.Entry<String, String> me : entries) {
System.out.println("路径:" + me.getKey() + "\t" + "文件名:" + me.getValue());
String str = me.getKey();
String folder = str.substring(0, str.lastIndexOf("\\"));
folder = folder.substring(folder.lastIndexOf("\\") + 1);
FileVo vo = new FileVo();
if (temp.equals(folder)) {
vo.setFolder(temp);
vo.setFile(me.getValue());
} else {
temp = folder;
vo.setFolder(temp);
vo.setFile(me.getValue());
}
list.add(vo);
}
}
}
Map<String, List<FileVo>> pp = list.stream().collect(Collectors.groupingBy(t -> t.getFolder()));
return pp;
}
public static void getFile(File[] files,List<HashMap<String,String>> fileList) {
for (File f : files) {
if (f.isDirectory()) {
getFile(f.listFiles(), fileList);
} else {
HashMap<String,String> map = new HashMap<>();
map.put(f.getAbsolutePath(), f.getName());
fileList.add(map);
}
}
}
@Anonymous
@ApiOperation("下载文件")
@GetMapping("/downLoadFile")
public Response downLoadFile(@RequestParam("fileName") String fileName, HttpServletResponse response,
HttpServletRequest request) throws UnsupportedEncodingException {
// String filePath = request.getSession().getServletContext().getRealPath("imgupload/");
String filePath = "E:\\iems\\";
System.out.println("fileName:" + fileName);
System.out.println("----------file download---" + filePath + fileName);
File file = new File(filePath + fileName);
if (file.exists()) { // 判断文件父目录是否存在
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition",
"attachment;fileName=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
byte[] buffer = new byte[1024];
FileInputStream fis = null; // 文件输入流
BufferedInputStream bis = null;
OutputStream os = null; // 输出流
try {
os = response.getOutputStream();
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
int i = bis.read(buffer);
while (i != -1) {
os.write(buffer);
i = bis.read(buffer);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bis.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return Response.ok();
}
}
package com.green.admin.common.utils.file;
import lombok.extern.slf4j.Slf4j;
import java.io.File;
import java.io.FileOutputStream;
@Slf4j
public class FileUtil {
public static void uploadFile(byte[] file, String filePath, String fileName) throws Exception {
File targetFile = new File(filePath);
if(!targetFile.exists()){
targetFile.mkdirs();
}
System.out.println("filePath:"+filePath+fileName);
FileOutputStream out = new FileOutputStream(filePath+fileName);
out.write(file);
out.flush();
out.close();
}
}
import lombok.Data;
import java.util.List;
@Data
public class FileListVo {
private String folder;
private List<String> files;
}
import lombok.Data;
@Data
public class FileVo {
private String folder;
private String file;
}
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setMaxFileSize(DataSize.ofGigabytes(1));
factory.setMaxRequestSize(DataSize.ofGigabytes(1));
return factory.createMultipartConfig();
}