javaWeb文件上传下载

24 篇文章 0 订阅
18 篇文章 0 订阅

上传:

<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="<%=request.getContextPath()%>/UploadServlet" method="post" enctype="multipart/form-data">
        文件:<input type="file">
        <input type="submit" value="提交">
    </form>
</body>
</html>
关于enctype:

application/x-www-form-urlencoded:表单enctype属性的默认值。这种编码方案使用有限的字符集,当使用了非字母和数字时,必须用“%HH”(H代表十六进制数字)。

对于大容量的二进制数据或包含非ASCII字符的文本来说,这种编码不能满足要求。

multipart、form-data:form设定了enctype="multipart/form-data"属性后,表示表单以二进制传输数据。

使用fileupload组件:

①:加入jar包,commons-fileupload-1.3.1.jar,commons-io-1.4.jar。

②:基本思想:

commons-fileupload 可以解析请求,得到一个fileItem对象组成的list

commons-fileupload 把所有的请求信息都解析为fileItem对象,无论是一个一般的文本域还是一个文件域。

可以调用fileItem的isFormField()方法来判断是一个表单域或不是表单域(则是一个文件域)

再来进一步获取信息

③:如何得到list<FileItem>对象。

3.1 简单方式:

        //创建文件上传工厂
        DiskFileItemFactory factory=new DiskFileItemFactory();
        ServletFileUpload upload=new ServletFileUpload(factory);
        List<FileItem> fis= upload.parseRequest(request);

3.2 复杂方式:可以为文件的上传加入一些限制条件和其他属性。

        //创建文件上传工厂
        DiskFileItemFactory factory=new DiskFileItemFactory();
        //设置内存中红缓存区大小,默认
        factory.setSizeThreshold(1024*500);
        //设置临时文件存放目录
        File file=new File("e:\\temp");
        if (!file.exists()){
            file.mkdir();
        }
        factory.setRepository(file);
        ServletFileUpload upload=new ServletFileUpload(factory);
        upload.setSizeMax(1024*1024*5);
        List<FileItem> fis= null;
        try {
            fis = upload.parseRequest(request);
        } catch (FileUploadException e) {
            e.printStackTrace();
        }
测试:

b.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="<%=request.getContextPath()%>/UploadServlet" method="post" enctype="multipart/form-data">
        文件:<input type="file" name="file">
        <input type="submit" value="提交">
    </form>
</body>
</html>

uploadServlet:

package com.sa.servlet;

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 javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.text.html.HTMLDocument;
import java.io.*;
import java.util.List;

@WebServlet(name = "UploadServlet",urlPatterns = "/UploadServlet")
public class UploadServlet extends HttpServlet {

    private static final long serialVersionUID = 2740937145205434705L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1. 得到fileItem的集合items
        //创建文件上传工厂
        DiskFileItemFactory factory=new DiskFileItemFactory();
        //设置内存中红缓存区大小,默认
        factory.setSizeThreshold(1024*500);
        //设置临时文件存放目录
        File file=new File("e:\\temp");
        if (!file.exists()){
            file.mkdir();
        }
        factory.setRepository(file);
        ServletFileUpload upload=new ServletFileUpload(factory);
        upload.setSizeMax(1024*1024*5);
        List<FileItem> fis= null;
        try {
            fis = upload.parseRequest(request);
        } catch (FileUploadException e) {
            e.printStackTrace();
        }
        //2.遍历items:
        for(FileItem fi:fis){
            // 若是一个一般的表单域,打印信息
            if(fi.isFormField()){

                System.out.println(fi.getFieldName()+
                fi.getString());
            }else{
                //若是文件域,则把文件保存在磁盘目录中
                InputStream in=fi.getInputStream();
                byte[] buffer=new byte[1024];
                int len=0;
                //设置真实存放目录
                String destination="e:\\temp\\"+fi.getName();
                OutputStream out=new FileOutputStream(destination);
                while ((len=in.read(buffer))!=-1){
                    out.write(buffer,0,len);
                }
                out.close();
                in.close();
                System.out.println("done");

            }
        }




    }

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

    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值