前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >文件上传与下载

文件上传与下载

作者头像
别团等shy哥发育
发布2023-02-27 10:21:33
6740
发布2023-02-27 10:21:33
举报
文章被收录于专栏:全栈开发那些事

第十二章:文件上传和下载

1.如何实现文件上传

文件上传:把本地电脑的文件上传带到服务器端(服务器也需要安装到本地硬盘) 文件上传也是通过表单传递数据的,对表单有了两个要求: [1].表单必须有file输入项: [2].表单的提交方式必须是post,enctype属性必须是multipart/form-data 第一种情况: 没有设置enctype属性值,(它的默认值:application/x-www-form-urlencoded)提交的参数:

代码语言:javascript
复制
   username=abcd&password=222222&filename=%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95.txt

提交的数据格式:key=value,这时候在服务器端可以使用request.getParameter的相关方法获取值 只提交了文件的名称,文件里面的数据并没有提交到后台服务器。 第二种情况: enctype属性值为multipart/form-data,提交的数据格式():(文件内容也提交了) 这时候在服务器端不可以使用request.getParameter的相关方法获取值

代码语言:javascript
复制
  如果想获取提交的参数,就需要apache提供的commons组件下面:
  commons-fileupload.jar,
  commons-io.jar.
  提供了相关的方法来获取enctype属性为multipart/form-data提交的参数

2.文件上传的相关API

文件上传的基本步骤: [1].创建文件上传项工厂对象:DiskFileUploadFactory factory=new DiskFileUploadFactory(); [2].通过工厂对象得到解析器:ServletFileUpload sf=new ServletFileUpload(factory); [3].解析请求对象得到上传的表单项:List list=sf.parseRequest(request); list集合里面包含普通的表单项和文件上传的表单项。 《1》FileItem接口 方法一:boolean f=isFormField(),如果值为true,代表是普通的表单项,否则 就是文件上传项。 方法二(文件上传项的方法):String filename=getName();表示获取文件的名称。 比如:由于不同浏览器提交的不同,获取文件名称时有的就是文件名称a.txt, 有的是C:/User/desktop/a.txt 方法三(普通表单项的方法):String name=getFieldName()返回的就是name属性的值, 比如: 返回的就是username。 方法四:void write(File file)主要应用于文件上传时,把文件保存到服务器端(服务器所安装的硬盘地址) 方法五:String value=getString();主要用于获取数据字符串其实就是获取用户输入的值。 方法六:String type=getContentType();获取的是文件的MIME类型, 比如:“image/jpeg” 方法七:boolean f=isInMemory() 判断上传的文件是存在内存中还是临时文件中。 方法八:void delete();文件上传完毕后,删除临时文件。 方法九:InputStream in=getInputStream();获取上传文件的字节输入流 方法十:long getSize();//获取上传文件的大小。 《2》DiskFileUploadFactory类 常用的方法: [1].setSizeThreshold(int sizeThreshold)和getSizeThreshold(); set方法用来设置上传文件的临界值。 比如:setSizeThreshold(1024);如果文件上传超出1024,启用临时文件。

[2].setRepository(java.io.File repository)和getRepository() 当上传的文件大小超出了setSizeThreshold方法设置的大小,就启用 临时文件,就是把上传的文件内容暂时保存在临时文件。 《3》.ServletFileUpload类 它的作用是解析request对象,把request对象立案封装的表单数据解析 成表单项。 方法一:List list=parseRequest(request); 方法二:setSizeMax:设置上传文件的总大小。 方法三:setFileSizeMax:设置单个文件的大小。

3.实现文件上传(思路)

步骤:1.创建项目,导入jar包。 2.准备上传页面:form.jsp 3.创建servlet处理上传的请求:UpLoadServlet.

4.文件下载(思路)

文件下载:从服务器端把文件保存到本地。 文件下载: 一个流两个头 [1]一个流:文件的字节输入流。 [2]两个头(响应头): Content-Type:对应文件的MIME类型(可以理解为文件的扩展名,但不是) Content-Dispostion:以下载框的方式保存文件。 5.实现文件下载 步骤:1.创建一个下载界面:download.jsp。 2.创建一个servlet处理下载请求:DownloadServlet.java。

6.下载文件名称为中文;中文乱码问题

下载时,文件名称为中文会出现乱码问题,解决方法: 第一种: 在页面里面:<a href="/chapter2/DownloadServlet?filename=<%=URLEncoder.encode(“熊.jpg”,“utf-8”) %>">文件下载-中文 在DownloadServlet里面:response.addHeader(“Content-Disposition”, “attachment;filename=”+java.net.URLEncoder.encode(filename,“utf-8”)); 它对IE浏览器乱码问题能够解决,但是对于火狐不能解决,还是乱码。 第二种:根据浏览器的不同处理(有bug,暂时没解决)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第十二章:文件上传和下载
  • 1.如何实现文件上传
  • 2.文件上传的相关API
  • 3.实现文件上传(思路)
  • 4.文件下载(思路)
  • 6.下载文件名称为中文;中文乱码问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档