关键词:
1、什么是上传和下载?
- 数据上传是指客户端向服务器上传数据,客户端向服务器发送的所有请求都属于数据上传。文件上传是数据上传的一种特例,指的是客户端向服务器上传文件。即将保存在客户端的文件上传至服务器中的一个副本,保存到服务器中。
- 数据下载是指客户端从服务器上获取数据的过程。文件下载是数据下载的一种特例,指的是客户端从服务器下载文件,即将原来保存在服务器中的文件下载到客户端中一个副本保存。通常我们对服务器所发出的请求,大多数是文件下载请求,从服务器中下载文本、图片、声音、视频等文件,然后由客户端浏览器对这些文件进行解析后,才可能看到这些多媒体信息。
- 但是我们这里所说的文件下载,指的是文件从服务器下载到浏览器后,浏览器并不直接解析,而是以附件的形式保存到客户端中。
- 上传与下载的文件可以是文本文件、图片、声音、视频等各种类型。
2、文件上传的实现:
a、上传时对表单的要求:
- 文件上传要求客户端表单提交特殊的请求--multipart请求,即包含多部分数据的请求。所以文件上传表单对于表单数据的编码类型要求,必须为multipart/form-data。即要为<form>标签指定enctype属性值为“multipart/form-data”。(enctype,即encodingtype,编码类型。)
- 由于客户端上传文件的大小是不确定的,所以HTTP协议规定,文件上传的数据要存放于请求正文中,而不能够出现在url的地址栏中,因为地址栏中可以存放的数据量太小。也就是说,文件上传的表单,必须提交POST请求,而不能够提交GET请求。
b、使用第三方工具实现文件上传:
- 需要使用到两个jar包:commons-fileupload-1.3.3.jar和commons-io-2.6.jar,jar包可以在apache官网中下载(commons-fileupload-1.3.3.jar依赖于commons-io-2.6.jar,如果只使用fileupload jar包,会运行程序时会抛出异常)
- 示例代码如下:
- 在index.jsp文件中填写的代码如下所示:
- 为web应用添加一个Servlet,在web.xml文件中添加配置信息:
- 自定义serlvet类,在doPost方法中编写简单实现文件上传的代码:
- 启动web应用,访问index.jsp,添加图片后,点击“上传”,可以发现控制台打印结果,在工作空间web项目的指定目录可以看到图片已经上传:(在Eclipse中,默认会把Web项目放到Eclipse的工作空间下的.metadata.pluginsorg.eclipse.wst.server.core mp0(或者是tmp1)wtpwebapps下)
- FileUploadServlet类中的代码相关解释:(也包含使用fileupload jar包文件上传时的常用方法)
- org.apache.commons.fileupload.disk.DiskFileItemFactory类:默认的FileItemFactory实现类。这个实现创建FileItem实例(文件条目)。如果是小条目,会将其存入内存中,如果是大条目,会将其存入硬盘中的临时文件。大小条目数据的临界值,是可配置的。
- setRepository(File repository)方法:设置临时存储文件(这个文件大小大于指定配置临界值)存放的目录位置。
- setSizeThreshold(int sizeThreshold)方法:设置临界值(单位为字节),当超过这个值时文件将会直接写入硬盘中。(如sizeThreshold为1024 * 1024,则为1兆)
- org.apache.commons.fileupload.servlet.ServletFileUpload类:处理文件上传的高级API。(如何存储各个部分的数据是由创建它们的工厂决定;给定的部分可能在内存中、磁盘上或者其他地方)
- parseRequest方法:解析请求,获取FileItem类型元素的List对象:
- ServletFileUpload类的父类org.apache.commons.fileupload.FileUploadBase的方法:
- 设置每个item的头部字符编码,其可以解决文件名的中文乱码问题:(若tomcat版本较低时,可能会出现文件名中文乱码)
- setFileSizeMax(long fileSizeMax)方法设置单个上传文件允许上传的最大边界值。
- setSizeMax(long sizeMax)方法设置一次上传所有文件的总和最大边界值。(单位都为字节)
- isMultipartContent(HttpServletRequest request)方法:判断该请求是否包含multipart内容
- org.apache.commons.fileupload.FileItem接口:表示在multipart/form-data的POST请求中内的一个文件或者表单条目。
- isFormField方法:判断FileItem实例是否为一个普通form项:
- getFieldName方法:获取对应文件条目(即单个表单项)的name属性值:
- getName方法:获取客户端文件系统中的原上传文件名:(包含后缀名)
- getInputStream方法:获取输入流,用于取出上传文件中的内容:
- delete方法:删除任何相关联的临时磁盘文件:
3、文件下载的实现:
a、超链接下载:将下载资源作为超链接的链接目标文件出现。若浏览器可以解析该资源文件,则将在浏览器上直接显示文件内容;若浏览器不支持该文件的解析,则会弹出另存为对话框,要求用户保存。
- 该下载方式的缺点很明显,不同的浏览器,以及相同的浏览器所安装的插件不同,那么其对于资源的解析能力也就不同,其是否弹出另存为对话框的情况也就不一样。决定权由浏览器掌握。
- 如在jsp文件中添加如下代码,在ff浏览器中点击,直接在浏览器中打开该图片:
b、Servlet方式的文件下载:
- 示例代码:
- jsp文件中的内容和web.xml文件中添加的配置:
- 自定义Servlet类中添加如下代码:
- 如果想要浏览器下载的方式是以附件的形式下载,需要修改响应的头部属性content-disposition值为attachment;filename=文件名 + 后缀名。(filename表示以附件形式下载显示的文件名)
-
javax.servlet.ServletContext接口的getResourceAsStream方法:获取web应用中的指定路径下的资源,以字节输入流InputStream的形式返回。- 启动web应用,点击超链接后,可以看到文件以附件的形式下载:
4、附加说明:
- 上传文件目录的管理:当用户上传的文件过多,而单个目录能够存放的文件个数有限,(windows系统下单文件夹中最大可有65,534个文件)所以需要上传的文件有时需要分目录进行管理。
- 可以使用java.io.File类的mkdir()方法来在当前目录中创建直接子目录,或者使用mkdirs()方法创建当前目录的多层子目录:
本文出自 “12392717” 博客,请务必保留此出处http://12402717.blog.51cto.com/12392717/1977293
javaweb:servlet实现下载与上传功能
本文内容: servlet实现下载功能servlet实现上传功能 首发日期:2018-07-21servlet实现下载功能实现流程1.首先制作一个jsp页面,主要是用来触发下载的。这里可以根据你的想法来做,当然servlet那边就要相应的更改了。我这里... 查看详情
javaweb实现文件上传下载功能实例解析(好用)(代码片段)
转:转:http://www.cnblogs.com/xdp-gacl/p/4200090.htmlJavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现。 对于文件上传,... 查看详情
javaweb文件上传与下载
文件上传上传的准备工作表单method必须为post提供file组件设置form标签的enctype属性为multipart/form-data,如果没有设置enctype属性,浏览器是无法将文件自身传递到服务端的(enctype默认为application/x-www-form-urlencoded)<formaction="fileuploa... 查看详情
javaweb文件上传与下载
一、文件上传原理 1、在TCP/IP中,最早出现的文件上传机制是FTP,它是将文件由客户端发送到服务器的标准机制;但是在jsp使用过程中不能使用FTP方法上传文件,这是由jsp运行机制所决定。 通过为表单元素设置method="... 查看详情
javaweb项目中文件的上传与下载(代码片段)
文件上传:将本地文件通过流的方式上传到服务器,常用的文件上传方法有很多,本次主要介绍的文件上传技术是FileUpLoad.文件上传三要素:1、表单提交方式为post. 2、需要有<inputtype="file">属性,name元... 查看详情
性能工具之jmeter上传与下载脚本编写(代码片段)
...法2、创建功能3、重命名和删除功能4、获取功能三、Java实现文件上传下载功能1、服务下载代码2、前端代码3、运行效果四、JMeter文件上传与下载脚本编写1、文件上传脚本2、文件下载脚本五、总结一、前言性能测试工作中,... 查看详情
javaweb开发——文件的上传和下载
一、功能性需求与非功能性需求要求操作便利,一次选择多个文件和文件夹进行上传;支持PC端全平台操作系统,Windows,Linux,Mac支持文件和文件夹的批量下载,断点续传。刷新页面后继续传输。关闭浏览器后保留进度信息。支持... 查看详情
javaweb学习(二十八)————文件上传和下载
...,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现。 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后... 查看详情
文件下载之断点续传(客户端与服务端的实现)
【转】文件下载之断点续传(客户端与服务端的实现)【转】文件下载之断点续传(客户端与服务端的实现)前面讲了文件的上传,今天来聊聊文件的下载。老规矩,还是从最简单粗暴的开始。那么多简单算简单?多粗暴算粗暴... 查看详情
javaweb实现文件下载
1.编写文件上传Servlet1publicclassFileUpload1extendsHttpServlet{2@Override3protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{45InputStreamin=null;6Ou 查看详情
javaweb_文件上传/下载篇(代码片段)
文件的上传/下载文件的上传和下载,是非常常见的功能。例如,头像图,就使用了上传;邮箱中也有附件的上传和下载功能;等等。本文主要是基于Servlet程序,通过form标签以及commons-fileupload.jar的API接口... 查看详情
文件下载之断点续传(客户端与服务端的实现)
原文:http://www.cnblogs.com/zhaopei/p/download.html 阅读目录 文件下载-服务端使用a标签提供文件下载使用Response.TransmitFile提供文件下载其他方式文件下载文件下载-客户端直接下载异步下载断点续传断点续传(服务端的支持)多线程... 查看详情
tcp之文件上传与下载(代码片段)
TCP文件上传下载客户端创建socket连接创建输出流读取文件写出文件关闭资源importjava.io.File;importjava.io.FileInputStream;importjava.io.OutputStream;importjava.net.InetAddress;importjava.net.Socket;publicclassTCPClientFilepublicstati 查看详情
javaweb:11.上传文件之目录打散
publicclassUpload3ServletextendsHttpServlet{publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ request.setCharacterEncoding("utf-8"); respo 查看详情
javaweb项目实现上传文件以及下载文件功能的关于路径的问题
项目目录是这样的。部署好后,登录该系统将一文件上传至webapp下某文件夹,然后下载该文件,也是在该系统中文件上传到src里,下载从target目录里下载,target目录是编译输出的结果,如果我刚上传文件,然后立刻下载,target文... 查看详情
nancy之文件上传与下载
...天稍微空闲一点,碰巧前几天看到有园友问我Nancy中下载文件的问题,然后就趁着休息的时间写下了这篇博客。直接进正题吧! 一、新建一个空的asp.net应用程序通过nuget安装相应的packages 二、添加Modules和Views文件夹用于... 查看详情
nancy之文件上传与下载(代码片段)
原文:Nancy之文件上传与下载零、前言由于前段时间一直在找工作,找到工作后又比较忙,又加班又通宵的赶项目,所以博客有段时间没有更新了。今天稍微空闲一点,碰巧前几天看到有园友问我Nancy中下载文件的问题,然后就趁... 查看详情
javaweb中的文件上传和下载功能的内容就这么多
一、开发环境搭建 创建一个FileUploadAndDownLoad项目,加入Apache的commons-fileupload文件上传组件的相关Jar包,如下图所示:二、实现文件上传2.1、文件上传页面和消息提示页面 upload.jsp页面的代码如下:1<%@pagelanguage="java"pageEn... 查看详情