javaweb学习总结(五)-文件上传

一.手动实现文件上传

1.指定表单类型为文件上传表单

2.提交方式必须为:POST

<form enctype="multipart/form-data" method="post" action="${pageContext.request.ContextPath}/test">
用户名:<input type="text" name="username"/>文件:<input type="file" name="file">
</form>

3.servlet代码

package com.cx.fileUpload;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * Created by cxspace on 16-7-7.
 */

public class TestServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //获取表单数据
        InputStream in = request.getInputStream();
        //转换流
        InputStreamReader inReader = new InputStreamReader(in);
        //缓冲流
        BufferedReader reader = new BufferedReader(inReader);

        String str = null;

        while ((str=reader.readLine())!=null){
            System.out.println(str);
        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
             doPost(request,response);
    }
}

二.使用FileUpload组件

apache提供的开源项目

1.引入.jar包

2.写处理代码

package com.cx.fileUpload;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * Created by cxspace on 16-7-7.
 */
@WebServlet(name = "FileUpload")
public class FileUpload extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //1.创建文件上传工厂类
        FileItemFactory fac = new DiskFileItemFactory();

        //2.创建文件上传核心对象
        ServletFileUpload upload = new ServletFileUpload(fac);

        //3.判断当前是否为文件上传表单
        if (upload.isMultipartContent(request)){
            //把请求数据转换为FileItem集合
            try {
                List<FileItem> list = upload.parseRequest(request);

                for (FileItem item : list){
                    if (item.isFormField())
                    {
                        // 普通表单
                        String fieldName = item.getFieldName();  //文本框名称
                        String content = item.getString(); //文本框值

                    }
                    else
                    {
                        String name = item.getName();  //文件名
                        String contentType = item.getContentType(); //文件类型
                        InputStream in = item.getInputStream();  //文件流

                        System.out.println(name+"-"+contentType);
                        //文件上传表单
                    }
                }

            } catch (FileUploadException e) {
                System.out.println("当前表单不是文件上传表单");
                e.printStackTrace();
            }

        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         doPost(request,response);
    }
}

3.分析api

|-FileItemFactory   文件上传工厂类

    fac.setRepository();  //设置临时目录

|-ServletFileUpload  文件上传核心类,可以获取所有的fileitem  

     List<FileItem> parseRequest(request);  拿到文件对象集合

     isMultipartContent(request); 判断表单类型 

     upload.setFileSizeMax(10);  设置单个文件最大大小

 upload.setSizeMax(100); 设置总文件最大大小

 upload.setHeaderEncoding; 设置上传文件名的编码 

|-FileItem  

      item.getFieldName();   获取上传表单元素名称

      item.getString(); 获取上传数据

      item.getSring("UTF-8")  获取上传文件数据,处理中文

      item.getContentType();  获取上传文件类型[文件项]

      item.getInputStream();  获取文件流[文件项目]

      item.getName();  获取文件名

      item.write(file); 写文件

      item.delete();删除临时文件

文件下载核心代码

String fileName = request.getParameter("filename");
fileName = new String(fileName.getBytes("ISO-8859-1"),"UTF-8");

String basePath = getServletContext().getRealPath("/upload");

InputStream in = new FileInputStream(new FIle(basePath,fileName));
//设置下载相应头response.setHeader("content-disposition","attachment;fileName="+fileName);
OutputStream out = response.getOutputStream();

byte[] b = new byte[1024];
int len = -1;

while ((len = in.read(b))!=-1){

 out.write(b,0,len);

}

out.close();

in.close();
时间: 2024-11-20 19:49:32

javaweb学习总结(五)-文件上传的相关文章

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

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

JavaWeb学习总结,文件上传和下载

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

学习笔记_springmvc文件上传和拦截器

文件上传 用到这两个包 配置视图解析器:springmvc配置文件配置 <!-- id必须要是"multipartResolver" --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- maxUploadSize文件上传的最大值,单位是byte

springMVC3学习(十二)--文件上传优化CommonsMultipartResolver

基于上一篇文件上传发现效率很慢,我们应该对它进行优化  使用springMVC对文件上传的解析器 来处理文件上传的时候需要在spring的applicationContext里面加上springMVC提供的MultipartResolver的申明 这样客户端请求的时候 springMVC会检查request里面是否包含多媒体信息 如果包含了就会使用MultipartResolver进行解析, springMVC会使用一个支持文件  处理的MultipartHttpServletRequest来包

SpringMVC学习记录(四)--文件上传

学习一个框架少不了学习文件上传 在使用springMVC进行系统实现时,springMVC默认的解析器里面是没有加入对文件上传的解析的,这可以方便我们实现自己的文件上传.但如果你想使用springMVC对文件上传的解析器来处理文件上传的时候就需要在spring的applicationContext里面加上springMVC提供的MultipartResolver的申明.这样之后,客户端每次进行请求的时候,springMVC都会检查request里面是否包含多媒体信息,如果包含了就会使用Multi

struts2学习(14)struts2文件上传和下载(4)多个文件上传和下载

四.多个文件上传: 五.struts2文件下载: 多个文件上传action com.cy.action.FilesUploadAction.java: package com.cy.action; import java.io.File; import org.apache.commons.io.FileUtils; import com.opensymphony.xwork2.ActionSupport; public class FilesUploadAction extends Actio

Codeigniter入门学习笔记11—文件上传

很久很久以前学习Codeigniter的笔记记录,很随意,但都是自己记录的,希望对需要的人有所帮助. 本文使用word2013编辑并发布 Postbird | There I am , in the world more exciting! Postbird personal website : http://www.ptbird.cn 文件上传 1.手动创建好上传目录 2.controllers/user ? 3.views/user/fileAction.php ????//表单需要强调是文

JavaWeb 后端 &lt;十四&gt; 文件上传下载

1.文件上传与下载 案例: 注册表单/保存商品等相关模块! --à 注册选择头像 / 商品图片 (数据库:存储图片路径 / 图片保存到服务器中指定的目录) 1.1 文件上传 文件上传,要点: 前台: 1. 提交方式:post 2. 表单中有文件上传的表单项: <input type=”file” /> 3. 指定表单类型: 默认类型:enctype="application/x-www-form-urlencoded" 文件上传类型:enctype =”multipart/

SpringMvc入门五----文件上传

? 知识点: SpringMvc单文件上传 SpringMvc多文件上传 ? 这里我直接演示多文件上传,单文件的上传就不说了,不过代码都是现成的. 效果预览: ? DEMO图: ? ? 添加文件上传jar包: Web.xml配置文件:添加spring Servlet ????<servlet> ????????<servlet-name>springmvc</servlet-name> ????????<servlet-class>org.springfra