`

apache commons fileupload 组件上传文件

阅读更多
package com.sf.novatar.plf.controller;

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

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

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
* 上传
* @author sfit1512
*
*/
@Controller
@RequestMapping("/upload")
public class UploadController {


@RequestMapping(value = "/upload", method = RequestMethod.POST)
public void upload(HttpServletRequest request,HttpServletResponse response,HttpSession session){
//String transactionImportTemp = (String) request.getSession().getServletContext().getAttribute(Constants.TRANSACTION_IMPORT_TEMP); 
//String transactionImportTemp =request.getServletContext().getContextPath();
String transactionImportTemp = request.getSession().getServletContext().getRealPath("/pc-rs/novatar.frameimpl/scripts/static/upload");
       
//String transactionImportTemp ="E:\\upload";
// 设置上传文件最大为 3M 
        final long MAX_SIZE = 5 * 1024 * 1024; 
        // 允许上传的文件格式的列表 final 
        String[] allowedExt = new String[] { "xlsx" }; 
 
        response.setContentType("text/html"); // 设置字符编码为UTF-8, 这样支持汉字显示 
        response.setCharacterEncoding("UTF-8"); 
 
        // 实例化一个硬盘文件工厂,用来配置上传组件 
        DiskFileItemFactory dfif = new DiskFileItemFactory(); 
        // 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘 
        dfif.setSizeThreshold(4096); // 设置存放临时文件的目录,web根目录下的ImagesUploadTemp目录 
        File tmpFile = new File(transactionImportTemp); 
        if (!tmpFile.exists()) { 
            tmpFile.mkdirs(); 
        } 
        dfif.setRepository(tmpFile); 
 
        // 用以上工厂实例化上传组件 
        ServletFileUpload sfu = new ServletFileUpload(dfif); 
        // 设置最大上传尺寸 
        sfu.setSizeMax(MAX_SIZE); 
 
        PrintWriter out=null;
try {
out = response.getWriter();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();

        // 从request得到 所有 上传域的列表 
        List fileList = null; 
        try { 
            fileList = sfu.parseRequest(request); 
        } catch (FileUploadException e) { 
            // 处理文件尺寸过大异常 
            e.printStackTrace(); 
            if (e instanceof SizeLimitExceededException) { 
                out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节<p />"); 
                out.println("<a href=\"upload.html\" target=\"_top\">返回</a>"); // 
                e.printStackTrace(); 
                return; 
            } 
        } 
 
        // 没有文件上传 
        if (fileList == null || fileList.size() == 0) { 
            out.println("请选择上传文件<p />"); 
            out.println("<a href=\"upload.html\" target=\"_top\">返回</a>"); //  
            return; 
        } 
 
        // 得到所有上传的文件 
        Iterator fileItr = fileList.iterator(); // 循环处理所有文件 
        while (fileItr.hasNext()) { 
            FileItem fileItem = null; 
            String path = null; 
            long size = 0; 
            // 得到当前文件 
            fileItem = (FileItem) fileItr.next(); 
            // 忽略简单form字段而不是上传域的文件域(<input type="text" />等) 
            if (fileItem == null || fileItem.isFormField()) { 
                continue; // 得到文件的完整路径 
            } 
            path = fileItem.getName(); 
            // 得到文件的大小 
            size = fileItem.getSize(); 
            if ("".equals(path) || size == 0) { 
                out.println("请选择上传文件<p />"); 
                out.println("<a href=\"upload.html\" target=\"_top\">返回</a>"); // return; 
            } 
 
            // 得到去除路径的文件名 
            String t_name = path.substring(path.lastIndexOf("\\") + 1); 
            // 得到文件的扩展名(无扩展名时将得到全名) 
            String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1); 
            // 拒绝接受规定文件格式之外的文件类型 
            int allowFlag = 0; 
            int allowedExtCount = allowedExt.length; 
            for (; allowFlag < allowedExtCount; allowFlag++) { 
                if (allowedExt[allowFlag].equals(t_ext)) { 
                    break; 
                } 
            } 
            if (allowFlag == allowedExtCount) { 
                out.println("请上传以下类型的文件<p />"); 
                for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++) { 
                    out.println("*." + allowedExt[allowFlag] 
                            + "&nbsp;&nbsp;&nbsp;"); 
                    out 
                            .println("<p /><a href=\"upload.html\" target=\"_top\">返回</a>"); // return; 
                } 
            } 
 
            // long now = System.currentTimeMillis(); 
            // 根据系统时间生成上传后保存的文件名 
            // String prefix = String.valueOf(now); 
            // 保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下 
            // String u_name = transactionImportTemp + prefix + "." + t_ext; 
            try { // 保存文件 
                fileItem.write(new File(t_name)); 
                out.println("文件上传成功。已保存为:" + t_name + "。"); 
            } catch (Exception e) { 
                e.printStackTrace(); 
            } 
        } 
}
}
分享到:
评论

相关推荐

    基于apache commons.fileupload的文件上传组件,改进了上传速度

    apache commons.fileupload上传组件在上传文件时,在调用parseRequest方法时,先将输入流上传到服务器临时目录,在之后的文件处理过程中,再将临时目录下保存的文件复制到指定的目录,多了一道转储步骤。本实现抽取...

    Apache Commons fileUpload实现文件上传

    1. 安全性:确保验证上传文件的类型和大小,防止恶意文件上传。 2. 异常处理:捕获并处理解析、写入文件时可能出现的异常。 3. 性能优化:合理设置内存阈值,避免大文件一次性加载到内存。 4. 文件命名:避免使用...

    基于apache commons.fileupload的文件上传组件

    在创建一个基于Apache Commons FileUpload的文件上传组件时,通常会包含以下步骤: 1. 创建`DiskFileItemFactory`实例。 2. 使用工厂创建`ServletFileUpload`实例,设置大小限制。 3. 解析`HttpServletRequest`对象...

    文件上传组件_Apache_Commons_FileUpload_应用指南.pdf

    使用 Apache Commons Fileupload 文件上传组件需要两个类库文件:commons-fileupload-1.2.2.jar和commons-io-1.4.jar。 2. 下载和安装组件 下载 commons-fileupload-1.2.2.jar 和 commons-io-1.4.jar 文件,并将其...

    利用commons-fileupload上传组件上传文件(一)

    在本文中,我们将深入探讨如何使用Apache Commons FileUpload组件来实现文件上传功能。Apache Commons FileUpload是一个用于处理HTTP请求中的多部分数据的Java库,它使得在Servlet或JSP应用中处理文件上传变得简单易...

    利用org.apache.commons.fileupload上传多个文件

    Apache Commons FileUpload 是一个用于处理 HTTP 请求中多部分(multipart)数据的 Java 库,尤其适合上传文件。在本文中,我们将深入探讨如何利用该库实现多个文件的上传功能。 一、准备工作 在使用 Apache ...

    commons-fileUpload组件

    标题"commons-fileUpload组件"指的是Apache Commons FileUpload,这是一个Java库,专门用于处理HTTP请求中的文件上传。它与另一个组件Apache Commons IO紧密协作,为Java应用程序提供方便、高效的文件上传功能。 ...

    实用commons-fileUpload组件上传文件

    总的来说,Apache Commons FileUpload组件通过提供一套完整的API,使得处理文件上传变得标准化和易于管理。通过熟练掌握这个组件,开发者可以轻松地在Java Web应用中实现安全、高效的文件上传功能。

    使用fileupload组件实现文件上传功能

    FileUpload组件是Apache提供的一款文件上传组件,能够帮助我们轻松实现文件上传功能。下面我们将详细介绍使用FileUpload组件实现文件上传功能的步骤和要点: 首先,需要引入两个jar包:commons-fileUpload.jar和...

    commons-fileupload和commons-io的jar包

    Apache Commons FileUpload库是一个专门处理HTTP协议中的多部分请求(multipart/form-data)的组件,常用于Web应用程序中的文件上传功能。在Servlet或JSP环境中,它可以帮助开发者轻松地解析请求中的文件数据,避免...

    commons-fileupload上传组件

    首先,Commons FileUpload组件的核心功能是解析HTTP请求中的`multipart/form-data`内容,这是HTML表单上传文件时通常使用的编码方式。它能够识别并提取每个部分的数据,包括文件内容和其他非文件数据,如文本字段。 ...

    commons-fileupload组件上传问题

    本文将详细解析"commons-fileupload组件上传问题",并结合提供的资源来探讨如何解决这类问题。 首先,Apache Commons FileUpload组件允许我们在Servlet环境中处理multipart/form-data类型的表单数据,这是用来上传...

    commons-fileupload-1.4 jar包.rar

    Apache Commons FileUpload组件就是为了解决这一问题而设计的,它提供了一套完整的解决方案,使得开发者可以方便、高效地处理HTTP请求中的多部分数据,即文件上传。本篇文章将深入解析这个组件,帮助开发者更好地...

    Java 文件上传组件 Apache Commons FileUpload 应用指南

    - RFC1867 引入了在 HTML 表单中上传文件的功能,要求使用 `multipart/form-data` 编码类型。客户端浏览器在提交包含文件的表单时,会将文件内容分割并编码,然后以多部分消息体的形式发送给服务器。 - 服务器端...

    commons-fileupload文件上传实例

    Apache Commons FileUpload是Apache软件基金会开发的一个开源组件,专门处理HTTP请求中的多部分数据(multipart/form-data),这是文件上传的标准格式。该库提供了解析请求、存储上传文件和处理异常的能力。 **二、...

    使用commons-fileupload上传文件

    【使用commons-fileupload上传文件】 Apache Commons FileUpload是Apache组织的一个子项目,专注于处理HTTP文件上传。这个组件提供了一个简洁的API,使得开发者能够轻松地在Java应用中处理由浏览器发送的多部分...

Global site tag (gtag.js) - Google Analytics