1.文件下载
/**NIO文件下载工具类* @author olalu*/
public class NioDownloadUtils {/*** @description:* @param file: 要下在文件* @return: void*/public static void downloadDoc(File file,HttpServletResponse response) throws IOException {OutputStream outputStream = response.getOutputStream();String contentType = Files.probeContentType(Paths.get(file.getAbsolutePath()));//设置响应头response.setHeader("Content-Type", contentType);response.setHeader("Content-Disposition", "attachment;filename="+ new String(file.getName().getBytes("utf-8"),"ISO8859-1"));response.setContentLength((int) file.length());//获取文件输入流FileInputStream fileInputStream = new FileInputStream(file);//获取输出流通道WritableByteChannel writableByteChannel = Channels.newChannel(outputStream);FileChannel fileChannel = fileInputStream.getChannel();//采用零拷贝的方式实现文件的下载fileChannel.transferTo(0,fileChannel.size(),writableByteChannel);//关闭对应的资源fileChannel.close();outputStream.flush();writableByteChannel.close();}public static void downloadDoc(String path,HttpServletResponse response) throws IOException {File file = new File(path);if (!file.exists()){throw new RuntimeException("文件不存在");}downloadDoc(file,response);}}
2.文件上传
/*** 文件上传方法*/public static Result uploading(MultipartFile file) {//获取文件名String realName = file.getOriginalFilename();String newName = null;if(realName != null && realName != ""){//获取文件后缀String suffixName = realName.substring(realName.lastIndexOf("."));//生成新名字newName = UUID.randomUUID().toString().replaceAll("-", "")+suffixName;}else {return Result.fail("文件名不可为空");}//创建流FileInputStream fis = null;FileOutputStream fos = null;//创建通道FileChannel inChannel = null;FileChannel outChannel = null;try {fis = (FileInputStream)file.getInputStream();//开始上传fos = new FileOutputStream(UPLOAD_URL+"\\"+newName);//通道间传输inChannel = fis.getChannel();outChannel = fos.getChannel();//上传inChannel.transferTo(0,inChannel.size(),outChannel);}catch (IOException e){return Result.fail("文件上传路径错误");}finally {//关闭资源try {if (fis != null) {fis.close();}if (fos != null) {fos.close();}if (inChannel != null) {inChannel.close();}if (outChannel != null) {outChannel.close();}} catch (IOException e) {e.printStackTrace();}}return Result.ok(newName);}