美文网首页
上传文件插件浅析

上传文件插件浅析

作者: nzdnllm | 来源:发表于2019-02-28 08:40 被阅读0次

    在当前业务线上传文件方法 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();
        }
    }
    

    相关文章

      网友评论

          本文标题:上传文件插件浅析

          本文链接:https://www.haomeiwen.com/subject/krnayqtx.html