通过form表单上传文件(多文本框,多图片的),后台接收的方法

本文详细介绍了如何使用form表单进行文件上传,并通过Servlet解析请求,实现文件的接收与存储。利用Apache Commons FileUpload库解析multipart/form-data类型的数据,设置文件大小限制,编码格式,以及文件名的唯一化处理。

 单纯form表单提交   上传文件时,form表单应加上参数  enctype="multipart/form-data

 

 后台接收时的代码:将表单数据封装进 list集合中

package com.jredu.servlet;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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 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 com.jredu.model.User;
import com.jredu.service.UserService;
import com.jredu.service.Impl.UserServiceImpl;

@WebServlet("/register.action")
public class Register extends HttpServlet {

    /**
     * 
     */
    private static final long serialVersionUID = 1057467000241502504L;

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        UserService service = new UserServiceImpl();
        // 创建磁盘工厂 缓冲区和磁盘目录
        DiskFileItemFactory factory = new DiskFileItemFactory();
        // 设置文件上传的大小限制
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setFileSizeMax(1024 * 1024 * 10);// 最大上传10M
        upload.setHeaderEncoding("utf-8");// 设置编码格式
        try {
            String name = null;
            // 注册获取前台的值
            String value = null;
            String newName = null;
            ArrayList<Object> list = new ArrayList<Object>();
            @SuppressWarnings("unchecked")
            List<FileItem> files = upload.parseRequest(req);
            for (FileItem fileItem : files) {
                // 判断当前的数据时文件还是普通的表单
               
                if (fileItem.isFormField()) { // 是文件
                    name = fileItem.getFieldName();// 获取属性的名字
                    value = fileItem.getString("utf-8");// 获取属性的值
                    list.add(value);
                } else {// 是表单
                    // 获取文件上传的文件名
                    name = fileItem.getName();

                    // 定义一个新的文件来接收
                    newName = System.currentTimeMillis() + name;// 以当前的总秒数来命名防止图片名称相同而覆盖
                    File file = new File("D:\\image\\" + newName);

                    // 图片的存储路径
                    String headImg = "img/" + newName;
                    list.add(headImg);
                    // 从缓冲区写入磁盘
                    fileItem.write(file);
                    fileItem.delete();
                }

            }

            // 获取到全部的用户列表
            List<User> uList = service.allUser();

            // 将新注册的用户存入数据
            boolean flag = service.register(list);

            if (flag) {
                System.out.println("注册成功");

                // 跳转到登陆界面
                req.getRequestDispatcher("/page/login.jsp").forward(req, resp);

            } else {
                System.out.println("注册失败");
            }

        } catch (FileUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

  

转载于:https://www.cnblogs.com/cjeandailynotes/p/10857163.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值