JavaWeb基础知识总结. (66)

JavaWeb基础知识总结.

有时我们需要限制一个请求的大小。也就是说这个请求的最大字节数(所有表单项之和)!实现这一功能也很简单,只需要调用ServletFileUpload类的setSizeMax(long)方法即可。

例如fileUpload.setSizeMax(1024 * 10);,显示整个请求的上限为10KB。当请求大小超出10KB时,ServletFileUpload类的parseRequest()方法会抛出FileUploadBase.SizeLimitExceededException异常。

8 缓存大小与临时目录

大家想一想,如果我上传一个蓝光电影,先把电影保存到内存中,然后再通过内存copy到服务器硬盘上,那么你的内存能吃的消么?

所以fileupload组件不可能把文件都保存在内存中,fileupload会判断文件大小是否超出10KB,如果是那么就把文件保存到硬盘上,如果没有超出,那么就保存在内存中。

10KB是fileupload默认的值,我们可以来设置它。

当文件保存到硬盘时,fileupload是把文件保存到系统临时目录,当然你也可以去设置临时目录。

JavaWeb基础知识总结.

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

request.setCharacterEncoding("utf-8");

DiskFileItemFactory dfif = new DiskFileItemFactory(1024*20, new File("F:\\temp"));

ServletFileUpload fileUpload = new ServletFileUpload(dfif);

try {

List<FileItem> list = fileUpload.parseRequest(request);

FileItem fileItem = list.get(1);

String name = fileItem.getName();

String savepath = this.getServletContext().getRealPath("/WEB-INF/uploads");

// 保存文件

fileItem.write(path(savepath, name));

catch (Exception e) {

throw new ServletException(e);

}

}

private File path(String savepath, String filename) {

// 从完整路径中获取文件名称

int lastIndex = filename.lastIndexOf("\\");

if(lastIndex != -1) {

filename = filename.substring(lastIndex + 1);

}

// 通过文件名称生成一级、二级目录

int hCode = filename.hashCode();

String dir1 = Integer.toHexString(hCode & 0xF);

String dir2 = Integer.toHexString(hCode >>> 4 & 0xF);

savepath = savepath + "http://www.likecs.com/" + dir1 + "http://www.likecs.com/" + dir2;

// 创建目录

new File(savepath).mkdirs();

// 给文件名称添加uuid前缀

String uuid = CommonUtils.uuid();

filename = uuid + "_" + filename;

// 创建文件完成路径

return new File(savepath, filename);

}

 
文件下载 2 通过Servlet下载1

被下载的资源必须放到WEB-INF目录下(只要用户不能通过浏览器直接访问就OK),然后通过Servlet完成下载。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzfdw.html