美文网首页
JavaWeb - 文件上传和下载

JavaWeb - 文件上传和下载

作者: 小闫94 | 来源:发表于2018-03-22 10:46 被阅读0次

文件上传和下载的实质:文件的拷贝

文件上传:从本地拷贝到服务器磁盘上 客户端需要编写文件上传表单---->服务端需要编写代码接受上传的 文件
文件下载:从服务器磁盘上拷贝到本地磁盘 需要编写服务端的代码,客户端的下载的工作浏览器内核解决的

  1. 文件上传的步骤:
    (1) 需要写一个文件上传表单
    (2) 编写服务器端的代码用于接收上传的文件
  2. 客户端的编码
    注意事项:


    html代码
  3. 服务端接受文件上传的表单数据
    文件上传原理


    HTTP请求头

    使用方便快捷的文件上传的工具---Apache Commons-fileupload.jar
    使用步骤:
    (1) 下载文件上传的jar包 fileuplaod 借助于 commons-io.jar


    工具jar包
    (2) 使用fileupload工具中的API进行编码
  4. FileUpload工具中三个核心的对象
    DiskFileItemFactory:磁盘文件项工厂--一些相关的配置的设置 缓存的大小 临时目录的位置
    ServletFileUplaod:文件上传的一个核心类
    FileItem:代表每一个表单项
  5. 快速入门
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class FileuploadServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {      
        try {
            //接受上传文件    
            //1、创建磁盘文件项工厂
            DiskFileItemFactory factory = new DiskFileItemFactory();
            //2、创建文件上传的核心类
            ServletFileUpload upload = new ServletFileUpload(factory);  
            //3、解析request---获得文件项集合
            List<FileItem> parseRequest = upload.parseRequest(request);
            //4、遍历文件项集合
            for(FileItem item : parseRequest){
                //5、判断普通表单项/文件上传项
                boolean formField = item.isFormField();//是否是一个普通表单项
                if(formField){
                    //普通表单项
                    String fieldName = item.getFieldName();
                    String fieldValue = item.getString();
                    System.out.println(fieldName+":"+fieldValue);
                }else{
                    //文件上传项
                    //获得上传文件的名称
                    String fileName = item.getName();
                    //获得上传文件的内容
                    InputStream in = item.getInputStream();
                    //将in中的数据拷贝服务器上
                    String path = this.getServletContext().getRealPath("upload");
                    OutputStream out = new FileOutputStream(path+"/"+fileName);
                    int len = 0;
                    byte[] buffer = new byte[1024];
                    while((len=in.read(buffer))>0){
                        out.write(buffer, 0, len);
                    }               
                    in.close();
                    out.close();
                }
            }           
        } catch (FileUploadException e) {
            e.printStackTrace();
        }
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}
  1. 文件上传的API的详解
    (1) DiskFileItemFactory
    设置缓存大小:factory.setSizeThreshold() 单位是字节
    设置临时文件的目录:factory.setRepository(File)
    (2) ServletFileUpload
    判断是否是一个文件上传的表单:ServletFileUpload.isMultipartContent(request);
    解析request获得表单项的集合:upload.parseRequest(request);
    设置上传的文件名的编码方式:upload.setHeaderEncoding("UTF-8");
    (3) FileItem
    判断是否是普通表单项:item.isFormField();
    获得表单的name属性值:item.getFieldName();
    获得表单的value值:item.getString("UTF-8") --- UTF-8表示获得中文时的编码
    获得上传文件的名称:item.getName()
    获得上传文件:item.getInputStream();
    删除临时文件:item.delete();
  2. 代码实现
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.IOUtils;

public class FileuploadServlet2 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            //1、创建磁盘文件项工厂
            //作用:设置缓存文件的大小  设置临时文件存储的位置
            String path_temp = this.getServletContext().getRealPath("temp");
            //DiskFileItemFactory factory = new DiskFileItemFactory(1024*1024, new File(path_temp));
            DiskFileItemFactory factory = new DiskFileItemFactory();
            factory.setSizeThreshold(1024*1024);
            factory.setRepository(new File(path_temp));
            //2、创建文件上传的核心类
            ServletFileUpload upload = new ServletFileUpload(factory);
            //设置上传文件的名称的编码
            upload.setHeaderEncoding("UTF-8");
            //ServletFileUpload的API
            boolean multipartContent = upload.isMultipartContent(request);//判断表单是否是文件上传的表单
            if(multipartContent){
                //是文件上传的表单
                //***解析request获得文件项集合
                List<FileItem> parseRequest = upload.parseRequest(request);
                if(parseRequest!=null){
                    for(FileItem item : parseRequest){
                        //判断是不是一个普通表单项
                        boolean formField = item.isFormField();
                        if(formField){
                            //username=zhangsan
                            String fieldName = item.getFieldName();
                            String fieldValue = item.getString("UTF-8");//对普通表单项的内容进行编码                     
                            System.out.println(fieldName+"----"+fieldValue);                    
                            //当表单是enctype="multipart/form-data"时 request.getParameter相关的方法
                            //String parameter = request.getParameter("username");                  
                        }else{
                            //文件上传项
                            //文件的名
                            String fileName = item.getName();
                            //获得上传文件的内容
                            InputStream in = item.getInputStream();
                            String path_store = this.getServletContext().getRealPath("upload");
                            OutputStream out = new FileOutputStream(path_store+"/"+fileName);
                            IOUtils.copy(in, out);
                            in.close();
                            out.close();
                            //删除临时文件
                            item.delete();
                        }
                    }
                }
            }else{
                //不是文件上传表单
                //使用原始的表单数据的获得方式 request.getParameter();
            }
        } catch (FileUploadException e) {
            e.printStackTrace();
        }
    }

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

相关文章

  • SpringMVC之文件上传和下载

    SpringMVC实现文件的上传和下载相对于JavaWeb阶段我们使用过servlet实现文件上传和下载操作;而S...

  • JavaWeb - 文件上传和下载

    文件上传和下载的实质:文件的拷贝 文件上传:从本地拷贝到服务器磁盘上 客户端需要编写文件上传表单---->服务...

  • JavaWeb 文件上传和下载

    一、文件上传 步骤 前端部分 1.提供一个post方法的表单,并设置enctype属性(设置请求内容的MIME类型...

  • JavaWeb实现文件上传、下载功能

    前言 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能...

  • 文件上传和下载

    一、概论 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载...

  • Struts学习 一 文件上传&下载

    文件的上传 & 下载功能是JavaWeb开发中非常常用的功能.话不多说,直接开撸. 文件上传 前端 FileUpl...

  • JavaWeb 文件上传与邮件发送

    一、JavaWeb 文件上传 1.1 概述 配置 Servlet 和 jsp 环境; 文件上传需要的 jar 包:...

  • AjaxUpload.js简单使用

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传的简单实现.官网...

  • javaweb 文件上传(fileupload) 下载

    1 文件上传 html中通过 可以向服务器上传文件。不过后台需要手动解析请求,比较复杂,所以可以使用smartup...

  • JavaWeb之上传下载与JavaMail

    title: JavaWeb之上传下载与JavaMailtag: JavaWeb upload JavaMailc...

网友评论

      本文标题:JavaWeb - 文件上传和下载

      本文链接:https://www.haomeiwen.com/subject/uyboqftx.html