上传文件插件浅析

2019-02-28  本文已影响0人  nzdnllm

在当前业务线上传文件方法 loadFileDropFunction() --前端JS

function loadFileDropFunc(tag) {
    
    var dropbox = $('#dropbox');

    dropbox.filedrop({
        paramname:'pic',
        maxfiles: 5, // 同时上传文件最多5个
        maxfilesize: 2,  //文件大小支持2M以内
        url: 'uploadMonitorCases?folderName=' + tag,  //指向uploadMonitorCases,参数名folderName,参数值tag(在本项目中传入的是业务线名称),将url和javaserverlet的对应关系配置在web.xml中
        uploadStarted:function(i, file, len) {
            document.getElementById("uploadcase_loading_layout").style.display = "block";
        }, //页面元素uploadcase_loading_layout为加载中的图片,上传时显示加载中图片
        
        progressUpdated: function(i, file, progress) {
            document.getElementById("uploadcase_loading_layout").style.display = "block";
        }, //上传中,显示加载中图片
        
        uploadFinished:function(i,file,response) {
            document.getElementById("uploadcase_loading_layout").style.display = "none";
            getFilesInFolder();
        },//上传完成后,隐藏加载中图片,获取文件夹
    //以下为上传文件的错误提示  
        error: function(err, file) {
            switch(err) {
                case 'BrowserNotSupported':
                    alert('Your browser does not support HTML5 file uploads!');
                    break;
                case 'TooManyFiles':
                    alert('Too many files! Please select 5 at most! (configurable)');
                    break;
                case 'FileTooLarge':
                    alert(file.name+' is too large! Please upload files up to 2mb (configurable).');
                    break;
                case 'FileTypeNotAllowed':
                    alert('File type not allowed!');
                    break;
                case 'FileExtensionNotAllowed':
                    alert('File extension not allowed!!');
                    break;
                default:
                    break;
            }
        }        
    });
};

web.xml配置

<servlet>
        <servlet-name>UploadMonitorCases</servlet-name>
        <servlet-class>com.xxx.servlet.UploadMonitorFilesServlet</servlet-class>
        <init-param>
            <param-name>monitorCaseRootPath</param-name>
            <param-value>此处配置上传文件最终存储路径</param-value>
        </init-param>
        <init-param>
            <param-name>temppath</param-name>
            <param-value>此处配置上传文件临时存储路径</param-value>
        </init-param>
</servlet>
<servlet-mapping>
        <servlet-name>UploadMonitorCases</servlet-name>
        <url-pattern>/uploadMonitorCases</url-pattern>
</servlet-mapping>

配置完成这样我们的uploadMonitorCases即使用UploadMonitorFilesServlet这个class

package com.xxx.servlet;

import java.io.*;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.*;
import javax.servlet.*;
import net.sf.json.JSONObject;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadMonitorFilesServlet extends HttpServlet {

    private String filePath; // 文件存放目录
    private String tempPath; // 临时文件目录
    
    private String folderName;

    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        
        filePath = config.getInitParameter("monitorCaseRootPath");
        tempPath = config.getInitParameter("temppath"); 
        System.out.println("case文件存放目录、临时文件目录准备完毕 ...");

    }

    public void doGet(HttpServletRequest req, HttpServletResponse res)
            throws IOException, ServletException {
        doPost(req, res);
    }

    public void doPost(HttpServletRequest req, HttpServletResponse res)
            throws IOException, ServletException {
        
        //设置传输编码
        res.setContentType("text/html;charset=UTF-8");
        //传值编码
        req.setCharacterEncoding("UTF-8");
        PrintWriter out = res.getWriter();
        
        // Folder名称
        folderName = req.getParameter("folderName");
        
        if (folderName == null || folderName.isEmpty()) {
            System.out.println("需要访问的目的文件夹为空,请重新操作!");
            out.write("需要访问的目的文件夹为空,请重新操作!");
            return;
        }
        
        try {
            DiskFileItemFactory diskFactory = new DiskFileItemFactory();
            // threshold 极限、临界值,即硬盘缓存 1M
            diskFactory.setSizeThreshold(4 * 1024);
            // repository 贮藏室,即临时文件目录
            diskFactory.setRepository(new File(tempPath));

            ServletFileUpload upload = new ServletFileUpload(diskFactory);
            // 设置允许上传的最大文件大小 4M
            upload.setSizeMax(4 * 1024 * 1024);
            // 解析HTTP请求消息头
            List fileItems = upload.parseRequest(req);
            Iterator iter = fileItems.iterator();
            
            String fileName = "";
            
            while (iter.hasNext()) {
                FileItem item = (FileItem) iter.next();
                if (item.isFormField()) {
                    System.out.println("处理表单内容 ...");
                    fileName = processFormField(item, out);
                } else {
                    System.out.println("处理上传的文件 ...  " + item.getName());
                    String savedfilePath = processUploadFile(item);
                    
                    out.write("处理完成!" + savedfilePath);
                }
            }
            out.flush();
            out.close();

        } catch (Exception e) {
            System.out.println("使用 fileupload 包时发生异常 ...");
            e.printStackTrace();
        }
    }

    // 处理表单内容
    private String processFormField(FileItem item, PrintWriter pw)
            throws Exception {
        String name = item.getFieldName();
        String value = item.getString();
        pw.println(name + " : " + value + "\r\n");
        return name.equals("filePath")?value:"";
    }

    // 处理上传的文件
    private String processUploadFile(FileItem item) throws Exception {
        // 此时的文件名包含了完整的路径,得注意加工一下
        String filename = item.getName();
        int index = filename.lastIndexOf("\\");
        filename = filename.substring(index + 1, filename.length());

        long fileSize = item.getSize();
        if ("".equals(filename) && fileSize == 0) {
            System.out.println("文件名为空 ...");
            return null;
        }

        File uploadFile = new File(filePath + folderName + "/" + filename);
        item.write(uploadFile);
        return uploadFile.getAbsolutePath();
    }
}
上一篇下一篇

猜你喜欢

热点阅读