17.文件上传、下载

/*文件上传*/(common-fileupload)(common-fileupload是依赖于common-io这个包的)
  使用Apache文件上传组件处理文件上传 /*步骤*/:
    1.创建一个DiskFileFactory factory = new DiskFileFactory();
    2.创建一个文件上传解析器

1 DiskFileItemFactory factory = new DiskFileItemFactory();
2 //方法用于设置当上传文件尺寸大于setSizeThreshold方法设置的临界值时,将文件以临时文件形式保存在磁盘上的存放目录。
3 //有一个对应的获得临时文件夹的 File getRespository() 方法。
4 factory.setRepository(new File(this.getServletContext().getRealPath("/WEB-INF/temp")));
5
6 ServletFileUpload upload = new ServletFileUpload(factory);

    3.判断提交上来的数据是否是上传表单的数据

1 if(!upload.isMultipartContent(request)){
2     //按照传统方式获取数据
3     return;
4 }

    4.使用ServletFileUpload 解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项

1 List<FileItem> list = upload.parseRequest(request);
2 for(FileItem item : list){
3     if(item.isFormField()){

    

文件上传功能有许多需要注意的 /*小细节*/问题,以下列出的几点需要特别注意的

  0.form表单中 加上 enctype="multipart/form-data",声明上传二进制数据

  1.为保证服务器安全,上传文件应该放在外界无法直接访问的目录表,比如放于WEB-INF目录下

  2.为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名

  3.为防止一个目录下面出现太多文件,要使用hash算法打散存储

  4.要限制上传文件的最大值

  5.要先回上传文件的类型,在收到上传文件名时,判断后缀名是否合法

  6.想确保临时文件(当上传文件大小超过工厂设置的缓冲区大小时(不设置默认10KB))删除,一定要在处理完上传文件后,调用item.delete方法

  7.监听文件上传进度

  8.在web页面中动态添加文件上传输入项

/*文件下载*/

1.在JSP页面提供下载的文件资源

2.实现文件下载

/*如何找到哈希打散后的对应文件*/

/*哈希打散后,文件名称不会发生变化 依旧是UUID + 文件名 在处理下载的Servlet中,

同样用Hash打散的方法,通过要下载的唯一文件名(UUID+文件名),和保存要下载文件的根目录,得到要下载的文件的存储目录*/

时间: 2024-10-05 04:11:06

17.文件上传、下载的相关文章

java web 文件上传下载

文件上传下载案例: 首先是此案例工程的目录结构: 处理上传: FileUploadServlet.java 1 package fnz.fileUploadTest; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.PrintWriter; 7 import java.text.SimpleDateFormat; 8 import java.

Hadoop之HDFS原理及文件上传下载源码分析(下)

上篇Hadoop之HDFS原理及文件上传下载源码分析(上)楼主主要介绍了hdfs原理及FileSystem的初始化源码解析, Client如何与NameNode建立RPC通信.本篇将继续介绍hdfs文件上传.下载源解析. 文件上传 先上文件上传的方法调用过程时序图: 其主要执行过程: FileSystem初始化,Client拿到NameNodeRpcServer代理对象,建立与NameNode的RPC通信(楼主上篇已经介绍过了) 调用FileSystem的create()方法,由于实现类为Dis

.Net Core 图片文件上传下载

当下.Net Core项目可是如雨后春笋一般发展起来,作为.Net大军中的一员,我热忱地拥抱了.Net Core并且积极使用其进行业务的开发,我们先介绍下.Net Core项目下实现文件上传下载接口. 一.开发环境 毋庸置疑,宇宙第一IDE VisualStudio 2017 二.项目结构 FilesController 文件上传下载控制器 PictureController 图片上传下载控制器 Return_Helper_DG 返回值帮助类 三.关键代码 1.首先我们来看Startup.cs

SpringMVC文件上传下载

在Spring MVC的基础框架搭建起来后,我们测试了spring mvc中的返回值类型,如果你还没有搭建好springmvc的架构请参考博文->http://www.cnblogs.com/qixiaoyizhan/p/5819392.html 今天我们来讲讲spring mvc中的文件上传和下载的几种方法. 首先附上文件目录->我们需要配置的我做了记号-> 一.文件上传 首先为了方便后续的操作,以及精简代码,我们在Utils包下封装一个文件上传下载的帮助类: Files_Helper

Selenium2学习-039-WebUI自动化实战实例-文件上传下载

通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a或其他方式结合实现). 非input标签类因其有各式各样的实现方式,需要考虑具体的场景,因而此文对此类文件上传不做讲解,以input标签实现文件上传的方式进行讲解,请知悉! 解决方案有如下三种: 1.定位元素直接通过sendkeys修改input标签的文件链接: 2.通过第三方控件(AutoIt)编

salesforce 零基础学习(四十二)简单文件上传下载

项目中,常常需要用到文件的上传和下载,上传和下载功能实际上是对Document对象进行insert和查询操作.本篇演示简单的文件上传和下载,理论上文件上传后应该将ID作为操作表的字段存储,这里只演示文件上传到Document对象中. 一.文件上传功能 apex代码 1 public with sharing class FileUploadUsedTransientController { 2 3 public transient Blob fileUploadBody{get;set;} 4

Retrofit2文件上传下载及其进度显示

序 前面一篇文章介绍了Retrofit2的基本使用,这篇文章接着介绍使用Retrofit2实现文件上传和文件下载,以及上传下载过程中如何实现进度的显示. 文件上传 定义接口 1 2 3 @Multipart @POST("fileService") Call<User> uploadFile(@Part MultipartBody.Part file); 构造请求体上传 1 2 3 4 5 File file = new File(filePath); RequestBod

JavaWeb实现文件上传下载功能实例解析

转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件

HttpClient文件上传下载

1 HTTP HTTP 协议可能是如今 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序须要直接通过 HTTP 协议来訪问网络资源. 尽管在 JDK 的 java.net 包中已经提供了訪问 HTTP 协议的基本功能,可是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活.HttpClient 用来提供高效的.最新的.功能丰富的支持 HTTP 协议的client编程工具包,而且它支持 HTTP 协议最新的版本号和建议. 一般的情况下我们都是使用Chro

JavaWeb实现文件上传下载功能实例解析 (好用)

转: 转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上