JavaEE文件上传

 

最早以前的文件上传就是进行拼接字符串。

步骤

[1]客户端要求

1)要有文件上传项

2)input type =file 还需要一个name属性

3)提交方式必须是post

4)enctype="multipart/form-data"

[2]实现文件上传市面常见的2种技术

1)jspsmartUpload

2)apache fileupload

 

[3]使用fileipload实现文件上传

enctype="multipart/form-data" 必须加才能获得请求体里面的内容上传到服务器 不写无法看到请求体里的内容

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

      <form action="up" method="post" enctype="multipart/form-data" >

            请输入用户名:<input type="text" name="name" /> </br>

            请上传文件:<input type="file"name="file" /> </br>

            <input type="submit" />

      </form>

</body>

</html>

 

1)导包

2)构建一个磁盘文件工厂

3)通过工厂获取一个文件核心上传类

4)解析request 返回list<FileItem>

5)循环list 取出每个FileItem 判断是普通项 还是文件项

6)根据对应的类型处理主请求

package com.xiaoshuai;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

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;

public class UploadServlet extends HttpServlet {

    

    @Override

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

        // TODO Auto-generated method stub

        try {

            System.out.println("开始下载");

            // [1]创建DiskFileItemFactory

            DiskFileItemFactory factory = new DiskFileItemFactory();



            // [2]创建一个解析请求的对象

            ServletFileUpload fileUpload = new ServletFileUpload(factory);

            // [2.1]解决乱码

            fileUpload.setHeaderEncoding("utf-8");

            // [3]解析request对象

            List<FileItem> list = fileUpload.parseRequest(request);

            // [4]遍历这个集合

            for (FileItem fileItem : list) {

                if (fileItem.isFormField()) {

                    // 表单的普通字段

                    String key = fileItem.getFieldName();

                    String value = fileItem.getString();

                    System.out.println("key = " + key + " value=" + value);

                } else {

                    // 文件内容

                    String fileName = fileItem.getName(); // 获取文件名字



                    // 文件的内容

                    InputStream inputStream = fileItem.getInputStream();



                    String realPath = getServletContext().getRealPath("upload");

                    System.out.println("realPath :" + realPath);



                    FileOutputStream fops = new FileOutputStream(realPath + "/" + fileName);

                    int len = 0;

                    byte[] buffer = new byte[1024];

                    while ((len = inputStream.read(buffer)) != -1) {

                        fops.write(buffer, 0, len);

                    }



                    fops.close();

                    inputStream.close();

                    System.out.println("下载成功");

                }

            }

        } catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

    @Override

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // TODO Auto-generated method stub

        doGet(req, resp);

    }

    

}

 

 

文件上传的核心类:

DiskFileItemFactory 磁盘工厂

DiskFileItemFactory(int sizeThreshold, java.io.File repository)

参数1:上传文件的缓存

参数2:如果上传的文件超过了你设置的缓存,设置一个新的临时目录来存放

factory.setSizeThreshold(1024*1024);//1mb

factory.setRepository(new File(getServletContext().getRealPath("temp")));

ServletFileUpload 核心文件上传类

ServletFileUpload(FileItemFactory fileItemFactory)

参数:需要一个磁盘工厂

解决文件上传乱码:

fileUpload.setHeaderEncoding("utf-8");

FileItem 数据类型

fileItem.isFormField()

String fieldName = fileItem.getFieldName(); // 取出字段的名字

String string = fileItem.getString(); // 取出字段的值

else

String fieldName = fileItem.getFieldName(); // 取出字段的名字

String string = fileItem.getString(); // 取出文件的内容

String name = fileItem.getName(); // 取出字段的值 实际上是文件名

删除临时文件 如果有的话

fileItem.delete()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兴帅_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值