首页>代码>基于spring MVC上传文件(图片上传)简单实例,无UI界面>/MvcFileUpload/src/com/zking/mvcfileupload/action/FileUploadAction.java
package com.zking.mvcfileupload.action;

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

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.zking.mvc.framework.Action;

public class FileUploadAction extends Action {

	// 上传文件存储目录
    private static final String UPLOAD_DIRECTORY = "upload";
 
    // 上传配置
    private static final int MEMORY_THRESHOLD   = 1024 * 1024 * 3;  // 3MB
    private static final int MAX_FILE_SIZE      = 1024 * 1024 * 40; // 40MB
    private static final int MAX_REQUEST_SIZE   = 1024 * 1024 * 50; // 50MB
	
	@Override
	public String execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 检测是否为多媒体上传
        if (!ServletFileUpload.isMultipartContent(request)) {
        	request.setAttribute("message", "Error: 表单必须包含 enctype=multipart/form-data");
        	System.out.println("Error: 表单必须包含 enctype=multipart/form-data");
            return "success";
        }
 
        // 配置上传参数
        DiskFileItemFactory factory = new DiskFileItemFactory();
        // 设置内存临界值 - 超过后将产生临时文件并存储于临时目录中
        factory.setSizeThreshold(MEMORY_THRESHOLD);
        // 设置临时存储目录
        factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
        ServletFileUpload upload = new ServletFileUpload(factory);
        // 设置最大文件上传值
        upload.setFileSizeMax(MAX_FILE_SIZE);
        // 设置最大请求值 (包含文件和表单数据)
        upload.setSizeMax(MAX_REQUEST_SIZE);
        // 中文处理
        upload.setHeaderEncoding("UTF-8"); 
        // 构造临时路径来存储上传的文件
        // 这个路径相对当前应用的目录
        String uploadPath = request.getServletContext().getRealPath("./") + File.separator + UPLOAD_DIRECTORY;
         
        // 如果目录不存在则创建
        File uploadDir = new File(uploadPath);
        if (!uploadDir.exists()) {
            uploadDir.mkdir();
        }
 
        try {
            // 解析请求的内容提取文件数据
            @SuppressWarnings("unchecked")
            List<FileItem> formItems = upload.parseRequest(request);
 
            if (formItems != null && formItems.size() > 0) {
                // 迭代表单数据
                for (FileItem item : formItems) {
                    // 处理不在表单中的字段
                    if (!item.isFormField()) {
                        String fileName = new File(item.getName()).getName();
                        String filePath = uploadPath + File.separator + fileName;
                        File storeFile = new File(filePath);
                        // 在控制台输出文件的上传路径
                        System.out.println(filePath);
                        // 保存文件到硬盘
                        item.write(storeFile);
                        request.setAttribute("message","文件上传成功!");
                    }
                }
            }
        } catch (Exception ex) {
        	ex.printStackTrace();
            request.setAttribute("message","错误信息: " + ex.getMessage());
        }
		return "success";
	}

}
最近下载更多
没猫病  LV11 2021年10月15日
汤汤汤要学编程  LV11 2021年4月16日
松烟入墨2018  LV16 2020年7月14日
wssm2333  LV6 2020年4月23日
demper  LV4 2020年3月25日
晓宋8888  LV3 2020年3月22日
wxd1997  LV13 2020年1月10日
gaopeng111  LV8 2019年11月6日
zywzywzyw1  LV17 2019年9月28日
二手玫瑰  LV15 2019年7月1日
最近浏览更多
暂无贡献等级
微信网友_6680567232876544  LV8 2023年10月10日
luandjustin 2023年7月3日
暂无贡献等级
asadda  LV2 2023年6月27日
joker1branch  LV5 2023年6月19日
我睡觉时不困  LV7 2023年6月15日
彩色天空  LV5 2023年4月8日
洋葱007  LV5 2022年12月13日
与哲rhcy  LV6 2022年12月4日
yymmdm  LV6 2022年9月5日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友