javaweb之实现文件上传与下载

     2022-03-25     397

关键词:

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... 查看详情