关于上传和下载的笔记

上传:

要求:1.表单的method必须是post

    2.表达增加enctype="multipart/form-data"

    3.input标签的type属性的值是file

Servlet具体方法:

    1.创建工厂:DiskFileItemFactory=new DiskFileItemFactory();

2.创建解析器:ServletFileUpload sfu=new ServletFileFactory(factory);

3.使用List<FileItem>从解析器得到文件:List<FileItem> list=sfu.ParseRequest(request);

4.可以根据FileItem的getName()得到文件的名称:FileItem fl=list.get(index);  String filename=fl.getName();

5.保存文件:File file=new File("文件路径");

6.fl.write(file);

=================================================

基本步骤大致如此

=================================================

但是----------------》》》》》》》

我们需要考虑一些细节:

1.上传文件的编码问题   有两种方式可以解决:

   1):request.setCharacterEncoding("utf-8");

    2):通过解析器的sfu.setHeaderEncoding("utf-8")方法解决   注意:当同时采取两种方法时,fu.setHeaderEncoding("utf-8")具有优先级,会覆盖                request.setCharac terEncoding("utf-8"); 

 

2.由于用户上传的文件带有路径,如何截取文件的名字呢?   通常在用户上传文件时会带有路径,比如:F:/demp/file/movies/AAA.txt,那么我们就只需要AAA.txt而不需要之前的信息,解决方法如下:

比方说我们保存F:/demp/file/movies/AAA.txt的变量为filename,那么    int index=filename.lastIndexof("\\");[此刻请注意是"\\",切记!]    if(index!=-1){     filename=filename.substring(index+1);    }

3.保存文件的时候保存的位置   首先我们不可能直接把文件保存在自己的磁盘上吧!不要问我为什么。肯定是要放在服务器上的,那么我们应该保存在哪里呢?最好是在WEB-INF目录下新建一个文件夹,比如说是files,切不可保存在webroot下,理由:不想说,但是我期待你这样做!!   如何保存呢?可以这样:   String root=this.getServletContext().getRealPath("/WEB-INF/files/");

4.当用户上传的文件过大时,如何处理难点直接保存在服务器?   在本次磁盘上建立一个临时的文件夹,用于临时保存用户的文件,当文件上传文件成功后服务器会自动将其保存到files里面。

实现方法:DiskFileItemFactory factory=new DiskFileItemFacoty(1024*10,new File("F:/temp"));

注意:1024*10表示上传的文件超过了10kb的时候就会放到临时文件夹,否则不会,可以随便改的,10KB也是默认的   new File("F:/temp")就不用说了吧,,,指定临时文件夹  4.如何对用户上传的文件大小限制   可以用解析器sfu的sf.setFileSizeMax(fileSizeMax)和sf.setSizeMax(fileSizeMax)方法解决,前者是单个文件限制,后者是表单文件大小限制

5.保存文件的时候如何处理同名问题   一般是在文件名的前面加上一个前缀,前缀肯定是唯一的嘛。具体实现自己看着办啊

6.文件的储存方式(不能在一个文件夹储存过多文件,否则会卡的,如果不信可以把你电脑的文件全部放在一个文件夹试试,你就慢慢打开吧)   我之前是在WEB-INF下建立了一个files文件夹,但是不能所有的文件都放在这里吧,

我们通常有两种方法处理此类问题:

1.时间打散:

2.哈希打散

  由于本次项目我使用的是哈希打散,所以我详细的介绍一下这个方法:

1).int code=filename.hashcode();//根据文件名称得到一个int类型的数字   String hex=Integr.setHexString(code);//根据该数字得到一个16进制的字符串

2).根据创建的files文件夹和hex随机生成文件夹,比如是两个级别的文件夹:    File dirFile=new File(root,hex.charAt(0)+"/"+hex.charAt(1));(root是第三步写的,没注意可以看)

3).然后执行dirFile.mkdirs()方法,创建多个文件夹【注意是mkdirs()不是mkdir(),区别不解释】

4).File deskFile=new File(dirfile, 有前缀的文件名);

5).最后,保存:file.write(deskFile);//保存

下载:

记住一句话:两个头一个流

两个头:

Content-Type:

       /*获取文件的MIME类型*/

    String contentType=this.getServletContext().getMimeType(filename);

Content-Dispostion:   String contentDisposition="attachmentDisposition;filename="+filename;

response.setHeader("Content-Type", contentType);

response.setHeader("Content-Disposition", contentDisposition);

一个流:文件流   FileInputStream input=new FileInputStream(file);

步骤就不说了,最后记得关闭流就可以了!!!

时间: 2024-10-05 12:18:27

关于上传和下载的笔记的相关文章

文件上传与下载学习笔记(2)---多文件、单文件、多个单文件函数封装

一:前导知识点: 1:is_string()判断一个变量是否是字符串 is_array 判断一个变量是否是数组 2:pathinfo()函数可以获取文件的扩展名. 3:创建目录函数 mkdir() 4: 生成唯一的随机数 uniqid() 5:判断文件.目录是否存在file_exsits() 二:思路与流程 三:封装的函数代码 1 <?php 2 /** 3 * 得到想要的文件类型 4 * @return unknown 5 */ 6 function getFiles() { 7 $i = 0

文件上传与下载学习笔记(3)---面向对象方法实现文件上传

代码: 1 <?php 2 class uploadClass { 3 protected $filename; 4 protected $maxSize; 5 protected $allowExt; 6 protected $allowMime; 7 protected $uploadPath; 8 protected $imgFlag; 9 protected $fileInfo; 10 protected $error; 11 protected $ext; 12 protected $

文件上传与下载学习笔记(1)---文件上传原理及配置

一:原理:将客户端的文件上传到服务器端的临时目录,再将服务器端的临时文件移动到指定目录. 二:客户端的配置 表单的method必须为post方法 表单必须添加enctype="multipart/form-data"属性 二者缺一不可. 三:将临时文件移动到指定目录 两种方法:1:move_uploaded_file($filename, $destination) 2:copy($source, $dest) 四:php.ini中的配置 在php.ini中搜索uploads ,会看到

文件上传与下载学习笔记(4)---文件下载

对于图片格式.HTML格式的文件,浏览器可以直接解析,但是如果不想让浏览器解析,让浏览器下载怎么办? 1 <?php 2 header("content-disposition:attachment;filename=".basename("1.jpg"));//basename()的使用 3 header("content-length:".filesize("1.jpg")); //下载时提示文件大小 4 readf

Javaweb学习笔记10—文件上传与下载

 今天来讲javaweb的第10阶段学习.文件的上传与下载,今天主要说的是这个功能的实现,不用说了,听名字就是外行人也知道肯定很重要啦. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的xMind画的,如果你对我的思维导图感兴趣并且想看到你们跟详细的备注信息,请点击下载 另外:如果图看不清的话请右击---在新窗口中打开会清楚很多 一*, 文件的上传:      1 *分析实现步骤: 1.1* 客户端浏览器通过文件域选择本地要上传的文件. * 点击"上传"按钮

linux命令学习笔记(26):用SecureCRT来上传和下载文件

用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. 文件传输协议: 文件传输是数据交换的主要形式.在进行文件传输时,为使文件能被正确识别和传送,我们需要在两台计算机之间建立统一的传输协议.这个协议包括了文件的识别.传送的起止时间.错误的判断与纠正等内容.常见的传输协议有以下几种: ASCII:这是最快的传输协议,但只能传送文本文件. Xmodem:这

SSH 利用SecureCRT上传、下载文件(使用sz与rz命令)

利用SecureCRT上传.下载文件(使用sz与rz命令) 借助securtCRT,使用linux命令sz可以很方便的将服务器上的文件下载到本地,使用rz命令则是把本地文件上传到服务器. 其中,对于sz和rz的理解与记忆我用了如下的方法(很多时候容易搞混): sz中的s意为send(发送),告诉客户端,我(服务器)要发送文件 send to cilent,就等同于客户端在下载. rz中的r意为received(接收),告诉客户端,我(服务器)要接收文件 received by cilent,就等

Linux (rz、sz命令行)与本地电脑 命令行上传、下载文件

Linux 与本地电脑直接交互, 命令行上传.下载文件. 一.lrzsz命令行安装: 1.rpm安装:(链接: http://pan.baidu.com/s/1cBuTm2 密码: vijf) rpm -ivh lrzsz-0.12.20-22.1.x86_64.rpm 2.yum 安装: yum install lrzsz 二.命令使用: 1.发送到本地: sz 文件名 2.上传到服务器: rz -be 在弹出的框中选择文件,上传文件的用户和组是当前登录的用户

文件的上传与下载

为方便用户处理文件上传数据,Apache 开源组织提供了一个用来处理表单文件上传的一个开源组件( Commons-fileupload ),该组件性能优异,并且其API使用极其简单,可以让开发人员轻松实现web文件上传功能,因此在web开发中实现文件上传功能,通常使用Commons-fileupload组件实现. 使用Commons-fileupload组件实现文件上传,需要导入该组件相应的支撑jar包:Commons-fileupload和commons-io. commons-io 不属于文