java 大文件下载_java+超大文件上传与下载

本文详细介绍了在SpringMVC中如何处理文件上传和下载的问题。在文件上传时,通过@RequestParam注解获取MultipartFile对象,然后将文件保存到指定路径。在文件下载时,使用HttpServletResponse设置响应头,确保文件以附件形式下载,并处理中文文件名乱码问题。此外,还提供了一个递归方法用于搜索特定文件夹下的文件。
摘要由CSDN通过智能技术生成

​这里先说下spring mvc 遇到的坑,就是如果文件上传时,后端这样写public String file1(HttpServletRequest request),根据request拿到的东西是空的。所以要下面这样写。

上传

在任何xml里面(因为都要加载到的,所以可以随便放进去)加上

cotroller里面

@RequestMapping(value="file",method=RequestMethod.POST)

public String file1(@RequestParam("file")MultipartFile file1,HttpServletRequest request) throws IOException {

InputStream inputStream=file1.getInputStream();

//System.out.println(file1.getOriginalFilename()+" "+file1.getSize());

//第一种是原始的java文件上传的方式,下载的话也跟这个差不多,所以下载就不写了;

String name=request.getSession().getServletContext().getRealPath("/")+"file";

System.out.println(name);

File file0=new File(name);

if(!file0.isDirectory()&&!file0.exists())

file0.mkdir();

name+="\\"+file1.getOriginalFilename();

File file=new File(name);

try {

file.createNewFile();

FileOutputStream outputStream;

outputStream = new FileOutputStream(file);

byte b[]=new byte[1024];

int n;

while((n=inputStream.read(b))!=-1){

outputStream.write(b, 0, n);

}

outputStream.close();

inputStream.close();

} catch (Exception e) {

e.printStackTrace();

}

//下面是xml引入的bean,也是比较方便的方法

/*

if(!file.isEmpty()){

try {

//这里将上传得到的文件保存至 d:\\temp\\file 目录

FileUtils.copyInputStreamToFile(file.getInputStream(), new File("d:/hello",

System.currentTimeMillis()+ file.getOriginalFilename()));

} catch (IOException e) {

e.printStackTrace();

}

}

*/

return "upload";

}

文件下载一般会涉及特定文件夹下的搜索文件(用迭代方法)

import java.io.File;

public class test {

public static void main(String[] args) {

String path="D:/hello/";

File file=new File(path);

researchfile(file);

}

public static void researchfile(File file) {

if (file.isDirectory()) {

File[] filearry = file.listFiles();

for (File f : filearry) {

if (f.isDirectory()) {

// System.out.println("0"+f.getAbsoluteFile());

} else {

System.out.println(f.getAbsoluteFile());

}

researchfile(f);

}

}

}

}

下载代码

@RequestMapping("download")

public String downLoad(HttpServletResponse response) throws UnsupportedEncodingException {

String filename="报名照片.jpg";

String filePath = "D:/NewFile" ;

File file = new File(filePath + "/" + filename);

if(file.exists()){ //判断文件父目录是否存在

response.setContentType("application/force-download");

response.setHeader("Content-Disposition", "attachment;fileName=" + new String("报名照片.jpg".getBytes("gb2312"),"ISO_8859_1"));

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) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println("----------file download" + filename);

try {

bis.close();

fis.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return null;

}

上面红色代码很重要,是让系统返回的不是页面,而是类似文件流的形式输出。其次还

解决Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name) 中文显示乱码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值