java中的文件上传、下载

(1)上传
如果有文件组件,必须采用post提交组件;
get提交方式将参数暴露在url地址栏中,参数只能是字符串,并且长度最多为233个字符;
post提交方式不会将参数暴露在url地址栏中,相对安全,支持二进制数据传参,大小没有限制;
enctype=multipart/form-data 表示符合表单数据;
file类型的标签必须有name属性;

<form action="/register" method="post" enctype="multipart/form-data">
<input type="file" name="myPhoto">

获取上传的文件资源

Part part = request.getPart("myPhoto");
String disposition = part.getHeader("content-disposition");
//获取上传文件的文件名
String fileName = disposition.substring(disposition.lastIndexOf("=")+2,disposition.length()-1);
System.out.println(fileName);
//获取upload文件夹的路径
String savePath = getServletContext().getRealPath("upload");
System.out.println(savePath);
//获取输入流
InputStream in = part.getInputStream();
//通过时间戳设置新名字
String newFileName = savePath+"\\"+new Date().getTime()+fileName;
//创建文件输出流
FileOutputStream out = new FileOutputStream(newFileName);
int len = -1;
byte[] bytes = new byte[1024];
while ((len=in.read(bytes)) != -1){
    out.write(bytes,0,len);
}
out.close();
in.close();

(2)下载

<a href='路径?fileName=文件名'>下载资源</a>
//获取文件名
String fileName= request.getParameter("fileName");
//获取路径
String downloadPath = getServletContext().getRealPath("路径名");
String filePath = downloadPath + "\\" +fileName;
//设置响应是下载操作,会去掉用浏览器自带的下载工具,filename设置下载后的文件名
response.setHeader("content-disposition","attachment;filename="+fileName);

FileInputStream in= new FileInputStream(filePath);
ServletOutputStream out = response.getOutputStream();

int len = -1;
byte[] bytes = new byte[1024];
while ((len=in.read(bytes)) != -1){
    out.write(bytes,0,len);
}
out.close();
in.close()

你可能感兴趣的:(后端)