多文件字段属性上传后台处理代码

    最近做了个多文件和多个字段属性同时上传的功能,共享一下自己的代码.

从前台传过来的请求数据不管怎样改变,后台取的数据的地方就是域对象中,

这段代码是使用的struts2作为表示层的,提供上传文件对应名,属性,getter,setter方法

    private File[] files;//上传的文件,前台文件的name
    private String[] filesFileName;//这是上传的文件名

    private String[] filesContentType;//上传的文件类型,可以在tomcat的conf下的web.xml配置文件中找到  

    public List<RequirementFile> uploadFiles(RequirementManage entity, String busiType, String rmId) throws Exception{
        // 上传文件
        List<RequirementFile> listfile = new ArrayList<RequirementFile>();
        for(int i = 0; i < files.length; i++){
            File file = files[i];
            String filenamestr = filesFileName[i];
            // 拼接保存文件目录(表名作为子目录)
            String path = null;
            if (rmId != null && busiType != null) {
                // 需要更新
                path = System.getProperty("catalina.home") + "\\" + "files" +"\\"+
                        BusiTypeEnum.getTableNameByCode(busiType);
            }else {
                path = System.getProperty("catalina.home") + "\\" + "files" +"\\"+
                        BusiTypeEnum.getTableNameByCode(entity.getBusiType());
            }
            
            // 拼接新的文件名
            //String filename = UuidKey.getInstance().genKey()+"_"+filenamestr;
            String filename = System.currentTimeMillis()+"_"+filenamestr;
            File f = new File(path);
            // 若目录不存在,创建
            if(!f.exists() && !f.isDirectory()){
                f.mkdirs();    //f.mkdir();没有s只能创建单级目录
            }
            try {
                // 创建输出流和输入流
                FileInputStream is = new FileInputStream(file);
                FileOutputStream os = new FileOutputStream(path+"\\"+filename);
                //流对拷
                IOUtils.copy(is, os);
                
                // 上传文件的信息
                RequirementFile requirementFile = new RequirementFile();//上传文件信息
                requirementFile.setRfId(UuidKey.getInstance().genKey());
                if (rmId != null && busiType != null) {
                    // 这是更新
                    requirementFile.setRmId(rmId);
                }else {
                    requirementFile.setRmId(entity.getRmId());
                }
                
                String suffix = filenamestr.substring(filenamestr.lastIndexOf(".") + 1);
                if (suffix.toUpperCase().endsWith("JPEG") || suffix.toUpperCase().endsWith("PNG")
                        || suffix.toUpperCase().endsWith("BMP") || suffix.toUpperCase().endsWith("GIF")) {
                    requirementFile.setFileType("1");
                }else if (suffix.toUpperCase().endsWith("DOC") || suffix.toUpperCase().endsWith("DOCX")) {
                    requirementFile.setFileType("2");
                }else if (suffix.toUpperCase().endsWith("XLS") || suffix.toUpperCase().endsWith("XLSX")) {
                    requirementFile.setFileType("3");
                }
                requirementFile.setFilePath(path+"\\"+filename);
                requirementFile.setFileName(filenamestr.substring(0, filenamestr.lastIndexOf(".")));
                listfile.add(requirementFile);
                // 关闭资源
                is.close();
                os.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        requirementFileService.insertBatch(listfile);
        
        return listfile;

    }

这个比较通用的代码:从域对象中取

    public String upload() throws Exception {
        // 定义对象
        String message = null;
        RequirementManage entity = new RequirementManage();
        List<RequirementFile> listfile = new ArrayList<RequirementFile>();
        Map<String, String> map = new HashMap<String, String>();
        Map<String, String> fileinfomap = new HashMap<String, String>();
        
        // 1.获取请求域
        HttpServletRequest request = getRequest();
        // 2.拼接上传文件的保存目录,由根目录和不同业务需求的子目录组成
        String rootPath = System.getProperty("catalina.home") + "/" + "files";
        // 2.1获取业务类型拼接对应子目录(以表明作为子目录)
        String busiType = request.getParameter("busiType");
        String tableName = BusiTypeEnum.getTableNameByCode(busiType);
        String path = rootPath +"/"+ tableName;
        File file = new File(path);
        // 2.2若目录不存在,创建
        if(!file.exists() && !file.isDirectory()){
            file.mkdir();
        }
        
        try {
            // 3.创建文件处理工厂
            DiskFileItemFactory factory = new DiskFileItemFactory();
            // 4.创建文件上传解析器,解析request域中数据
            ServletFileUpload upload = new ServletFileUpload(factory);
            upload.setHeaderEncoding("UTF-8");//设置编码,解决上传中文名乱码
            // 5.解析数据
            List<FileItem> list = upload.parseRequest(request);
            for (FileItem item : list) {
                if (item.isFormField()) {
                    //获取字段名字
                    String name = item.getFieldName();
                    //解决普通输入项中中文乱码问题
                    String value = item.getString("UTF-8");
                    map.put(name, value);
                }else {
                    //获得上传的文件名称
                    String filename = item.getName();
                    if(filename == null || filename.trim().equals(" ")){
                        continue;
                    }
                    //去掉获取到文件名中的路径名,保留单纯的文件名
                    filename = UuidKey.getInstance().genKey() + "_" + filename.substring(filename.lastIndexOf("\\") + 1);
                    //获取item中的上传文件的输入流
                    InputStream in = item.getInputStream();
                    //创建一个文件输入流
                    String filePath = path + "/" + filename;
                    FileOutputStream out = new FileOutputStream(filePath);
                    //流对拷
                    IOUtils.copy(in, out);
                    
                    // 添加上传文件的路径和文件名
                    fileinfomap.put(filePath, filename);
                    
                    // 关闭资源
                    if (in != null) {
                        in.close();
                    }
                    if (out != null) {
                        out.close();
                    }
                }
            }
            // 将普通字段需求信息保存
            BeanUtils.populate(entity, map);
            entity.setRmId(UuidKey.getInstance().genKey());
            entity.setCreateUserId(LoginUserUtil.getUserId());
            entity.setCreateUserName(LoginUserUtil.getUserName());
            entity.setCreateTime(new Date());
            entity.setModifyUserId(LoginUserUtil.getUserId());
            entity.setModifyUserName(LoginUserUtil.getUserName());
            entity.setModifyTime(new Date());
            requirementManageService.insert(entity);
            
            // 保存上传文件信息
            if (!fileinfomap.isEmpty()) {
                for(Map.Entry<String, String> entry : fileinfomap.entrySet()){
                    RequirementFile requirementFile = new RequirementFile();//上传文件信息
                    requirementFile.setRfId(UuidKey.getInstance().genKey());
                    requirementFile.setRmId(entity.getRmId());
                    
                    String suffix = entry.getValue().substring("".lastIndexOf(".") + 1);
                    if (suffix.toUpperCase().endsWith("JPEG") || suffix.toUpperCase().endsWith("PNG")
                            || suffix.toUpperCase().endsWith("BMP") || suffix.toUpperCase().endsWith("GIF")) {
                        requirementFile.setFileType("1");
                    }else if (suffix.toUpperCase().endsWith("DOC") || suffix.toUpperCase().endsWith("DOCX")) {
                        requirementFile.setFileType("2");
                    }else if (suffix.toUpperCase().endsWith("XLS") || suffix.toUpperCase().endsWith("XLSX")) {
                        requirementFile.setFileType("3");
                    }
                    requirementFile.setFilePath(entry.getKey());
                    requirementFile.setFileName(entry.getValue().substring(0, entry.getValue().lastIndexOf(".")));
                    listfile.add(requirementFile);
                }
                requirementFileService.insertBatch(listfile);
            }
            
            message = "success";//提示信息
            
        } catch (Exception e) {
            message = "上传失败!";
            e.printStackTrace();
        }
        
        this.setResult(new BusinessResult(true, message));
        return "success";
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值