Servlet文件上传

Servlet文件上传

一、jsp内容
1.method=“post”
2.enctype=“multipart/form-data” >

<form action="/fileservlet.do" method="post" enctype="multipart/form-data" >
    文件选择:<input type="file" name = "pic" id="pic">
    <input type="submit" value = "提交">
</form>

二、servlet
1.首先需要用到两个第三方jar包
在这里插入图片描述
2.主要用到三个类
DiskFileItemFactory 生产FileItem的工厂
ServletFileUpload
FileItem

@WebServlet("/fileservlet.do")
public class FileUpload extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
        doPost(request, response);
    }

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        try {
            // 解决文件名中文乱码
            request.setCharacterEncoding("UTF-8");
            // 设置缓存大小 及缓存目录
            DiskFileItemFactory factory = new DiskFileItemFactory();
            ServletContext servletContext = this.getServletConfig().getServletContext();
            // 配置临时文件的存储仓库
            File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
            factory.setRepository(repository);
            //创建文件上传的处理器
            ServletFileUpload fileUpload = new ServletFileUpload(factory);
            // 解决文件名中文乱码
            fileUpload.setHeaderEncoding("UTF-8");
            List<FileItem> items = fileUpload.parseRequest(request);
            // 迭代请求
            Iterator<FileItem> iterator = items.iterator();
            while (iterator.hasNext()) {
                FileItem item = iterator.next();
                if (item.isFormField()) {//判断fileItem是否是普通表单元素
                    String name = item.getFieldName();//表单元素的nanme属性
                    String value = item.getString();//表单元素的值
                    System.out.println(name + "---" + value);
                } else {//对文件上传的控件的处理
                    String fileName = item.getName();//要上传的文件的名称
                    // 绝对路径
                    File uploadedFile = new File("D://", fileName);
                    item.write(uploadedFile);
                }
            }
        } catch (Exception e) {
            System.out.println(String.format("解析文件错误%s", e));
        }
    }
}

三、解决文件名乱码问题
1.// 解决文件名中文乱码
request.setCharacterEncoding(“UTF-8”);

// 解决文件名中文乱码
fileUpload.setHeaderEncoding(“UTF-8”);
二选一。
2.如果获取属性值出现中文乱码
获取值时添加编码设置

String value = item.getString("UTF-8")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值