这是一篇关于文件上传下载的文章
文件的上传下载
1.文件上传
我们之前可能有了解或使用文件上传的组件和框架,比如Java的Commons FileUpload、还有Struts2等。 我们这里的示例是通过浏览器上传文件。 众所周知,在客户端代码中需要使用来选择要上传的文件,代码如下:
<form action = "upload" method = "POST" enctype = "multipart/form-data">
<input type = "file" name = "xxx" />
<input type = "submit" value = "上传提交" />
</form>
文件上传的三个要点:
- 1.method = “POST” 这里请求的方法必须是post.
- 2.enctype = “multipart/form-data” 编码类型是 多个表单数据.
- 3.type = “file” 要有file表单元素.
1.文件下载
UploadServlet
@MultipartConfig
Part part = req.getPart("abc");
String uploadFilename = part.getSubmittedFileName();
String filename= UUID.randomUUID().toString();
String ext = uploadFilename.substring(uploadFilename.lastIndexOf("."));
part.write("/D:/picture/"+filename + ext);
//获取要下载的文件名,比如2.jpg
String filename=req.getParameter("filename");
String encodedFileName=URLEncoder.encode(filename,"UTF-8");
resp.setHeader("content-disposition","attachment;filename="+encodedFileName);
//文件响应头的设置,解决弹出
//逻辑三:处理文件的读写
//确定从哪里去读取文件:/Users/cj/Downloads/
//获取文件输入流,从此路径代表的文件中读取内容
InputStream input=new FileInputStream("/D:/a/"+filename);
//输出流:从resp对象中获取一个servlet的响应流,往此响应流里写数据
//等价于吧数据写给浏览器
OutputStream output=resp.getOutputStream();
//从输出流中读取数据,并写到响应流中
try {
byte [] buffer=new byte[1024];
int numread=0;
while((numread=input.read(buffer))>0) {
output.write(buffer,0,numread);
}
} finally {
input.close();
output.close();
}
文件下载的四个要点:
- 1.@MultipartConfig
- 2.Part part = req.getPart(“xxx”); 得到part
- 3.获取提交的文件名 String uploadFilename = part.getSubmittedFileName(); String filename = UUID.randomUUID().toString(); //ext=.jpg String ext = uploadFilename.substring(uploadFilename.lastIndexOf(".")); //从后面截取
- 4.part.write("/a/b/c/"+filename+ext); 保存文件到服务器