文件上传与下载--servlet版本上传

前言:浏览器在上传的过程中是将文件以流的形式提交到服务器端的,所以采用apache的开源工具common-fileupload这个文件上传组件,jar包库配置如下:
jar包库配置

1. 新建一个web项目

2. 使用maven添加上传需要的jar包依赖

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

如果不是maven项目,可直接添加commons-fileupload.jar、commons-io.jar包进web项目

3、表单配置

    <form action="${basePathUrl}file/uplaodServlet" enctype="multipart/form-data" method="post">
        上传用户:<input type="text" name="username"><br/>
        上传文件:<input type="file" name="file1"><br/>
        <input type="submit" value="提交">
    </form>

4、上传servlet

public class UploadServlet extends HttpServlet{
    Logger logger  = Logger.getLogger(UploadServlet.class);
    public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
        //得到文件保存目录
        String savePath = this.getServletContext().getRealPath("/upload");
        File file = new File(savePath);
        System.out.println("目录:"+savePath);
        if(!file.exists() && !file.isDirectory()){
            System.out.println("目录不存在,需创建");
            file.mkdir();
        }
        String message = "";

        try {
            //Apache文件上传组件处理文件上传步骤:
            //创建一个DiskFileItemFactory工厂
            DiskFileItemFactory factory = new DiskFileItemFactory();
            //创建一个文件上传解析器
            ServletFileUpload upload = new ServletFileUpload(factory);
            //解决上传文件名的中文乱码
            upload.setHeaderEncoding("UTF-8");
            //判断提交的数据是狗是上传表单的数据
            if(! ServletFileUpload.isMultipartContent(request)){
                return;
            }
            //4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
            List<FileItem> list = upload.parseRequest(request); 
            for(FileItem item :list){
                //普通数据项
                if(item.isFormField()){
                    String name = item.getFieldName();
                    String value = item.getString("utf-8");
                    System.out.println(name+"="+value);
                }else {
                    //封装的是上传文件
                    String filename = item.getName();
                    System.out.println(filename);
                    if(filename.isEmpty()){
                        continue;
                    }
                    //处理获取到的上传文件的文件名的路径部分,只保留文件名部分
                    filename = filename.substring(filename.lastIndexOf("\\")+1);
                    //获取item中的文件输入流
                    InputStream in = item.getInputStream();
                    //创建一个文件输出流
                    FileOutputStream out =  new FileOutputStream(savePath +"\\"+filename);
                    //创建一个缓冲区
                    byte buffer[] = new byte[1024];
                    //创建一个输入流结束标识
                    int len = 0;
                    //将输入流读入缓冲区中
                    while((len = in.read(buffer))>0 ){
                        out.write(buffer,0,len);
                    }
                    //关闭输入流
                    in.close();
                    //关闭输出流
                    out.close();
                    //删除临时文件
                    item.delete();
                    message ="文件上传成功";
                }

            }

        } catch (Exception e) { 
            message="上传失败";
            e.printStackTrace();
        }
        request.setAttribute("message", message);
        request.getRequestDispatcher("/common/message.jsp").forward(request, response);

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

5、web.xml配置

      <servlet>
        <servlet-name>uploadServlet</servlet-name>
        <servlet-class>test.servlet.servlet.UploadServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>uploadServlet</servlet-name>
        <url-pattern>/file/uplaodServlet</url-pattern>
      </servlet-mapping>

参考代码:

孤傲苍狼:http://www.cnblogs.com/xdp-gacl/p/4200090.html

Shb_derek技术专栏:http://blog.csdn.net/shb_derek1/article/details/8543152

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值