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);
}
文章来源地址https://www.toymoban.com/news/detail-648704.html
文章来源:https://www.toymoban.com/news/detail-648704.html
到了这里,关于使用nio代替传统流实现文件上传和下载功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!