文档章节

JavaWeb开发中的文件上传下载

素人派
 素人派
发布于 2016/12/31 20:47
字数 609
阅读 64
收藏 1
  • 介绍
在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实现文件上传

本文转载自:http://surenpi.com/2015/05/26/javaweb%e5%bc%80%e5%8f%91%e4%b8%ad%e7%9a%84%e6%96%87%e4%bb%b6%e4%b8...

共有 人打赏支持
下一篇: base64
素人派
粉丝 22
博文 1906
码字总数 9279
作品 6
东城
程序员
私信 提问

暂无文章

容器服务

简介 容器服务提供高性能可伸缩的容器应用管理服务,支持用 Docker 和 Kubernetes 进行容器化应用的生命周期管理,提供多种应用发布方式和持续交付能力并支持微服务架构。 产品架构 容器服务...

狼王黄师傅
昨天
3
0
高性能应用缓存设计方案

为什么 不管是刻意或者偶尔看其他大神或者大师在讨论高性能架构时,自己都是认真的去看缓存是怎么用呢?认认真真的看完发现缓存这一块他们说的都是一个WebApp或者服务的缓存结构或者缓存实现...

呼呼南风
昨天
12
0
寻找一种易于理解的一致性算法(扩展版)

摘要 Raft 是一种为了管理复制日志的一致性算法。它提供了和 Paxos 算法相同的功能和性能,但是它的算法结构和 Paxos 不同,使得 Raft 算法更加容易理解并且更容易构建实际的系统。为了提升可...

Tiny熊
昨天
2
0
聊聊GarbageCollectionNotificationInfo

序 本文主要研究一下GarbageCollectionNotificationInfo CompositeData java.management/javax/management/openmbean/CompositeData.java public interface CompositeData { public Co......

go4it
昨天
3
0
阿里云ECS的1M带宽理解

本文就给大家科普下阿里云ECS的固定1M带宽的含义。 “下行带宽”和“上行带宽” 为了更好的理解,需要先给大家解释个词“下行带宽”和“上行带宽”: 下行带宽:粗略的解释就是下载数据的最大...

echojson
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部