JavaWeb开发中的文件上传下载

  • 介绍
在web开发中,文件的上传下载几乎是不可避免的。既然如此,我们就应该把这件事情彻底搞明白了。 对于文件的上传,有普通的需要刷新页面的方式,也有可以通过Ajax异步上传的。 采用反向代理控制文件下载的优点性能高,缺点是依赖反向代理服务器. 传统的Web服务器在处理文件下载的时候,总是先读入文件内容到应用程序内存,然后再把内存当中的内容发送给客户端浏览器。 这种方式在应付当今大负载网站会消耗更多的服务器资源。sendfile是现代操作系统支持的一种高性能网络IO方式,操作系统内 核的sendfile调用可以将文件内容直接推送到网卡的buffer当中,从而避免了Web服务器读写文件的开销,实现了“零拷贝”模式. 不同反向代理服务器的内部相应头分别为: nginx: X-Accel-Redirect squid: X-Accelerator-Vary apache: X-Sendfile lighttpd: X-Sendfile/X-LIGHTTPD-send-file 如果要对招投标文件做特点的权限控制,以防止盗链,在可以在nginx中配置如下类似的配置。 rewrite "^/mp3/(.*)\.mp3$" /read_file.php?id=$1 last; 或者将nginx的附件下载配置成只能从后端转发,不能从前端请求
  • 文件上传
文件上传,最重要的是这个表单,有两个必需的要素:
  1. <input type="file" name="file" />
  2. <form method="post" enctype="multipart/form-data"></form>
要特别注意的就是表达中的method和enctype的设置。 传统的文件上传就不多说了,这里有一篇介绍如何使用Ajax来上传文件的文章。
  • 文件下载
文件下载的基本原理就是要设置一些HTTP头信息,如下所示: response.addHeader("Content-Disposition", "attachment;filename=\"test.xls\""); response.setCharacterEncoding("UTF-8"); response.setContentType("application/octet-stream"); response.addHeader("Content-Length", "12"); 设置了上面的头信息,然后再把文件的字节信息写到response.getOutputStream();就可以了。 注意:上面Content-Length是用来设置文件大小的,这一项可以不设置。 application/octet-stream是文件类型的设置。
  • 参考
修改apache2文件上传的大小限制 利用Ajax异步上传文件 修改WordPress文件上传的默认策略 machael.blog.51cto.com/829462/479931 http://blog.sina.com.cn/s/blog_4967ea190100ja5p.html http://my.oschina.net/u/1388024/blog/220029 Java实现文件上传

你可能感兴趣的:(零拷贝)