java接收File文件的方法

1.

 @RequestMapping("/doSaveBill.htm")
	 public void uploadFile(Integer loginId,HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
        int num = 0;
        // 设置request编码,主要是为了处理普通输入框中的中文问题
        request.setCharacterEncoding("UTF-8");
        System.out.println("解析工作马上开始.......................");
        // 这里对request进行封装,RequestContext提供了对request多个访问方法
        org.apache.commons.fileupload.RequestContext requestContext = new ServletRequestContext(request);
        // 判断表单是否是Multipart类型的。这里可以直接对request进行判断,不过已经以前的用法了
        if (FileUpload.isMultipartContent(requestContext)) {

            num++;
            DiskFileItemFactory factory = new DiskFileItemFactory();
            // 设置文件的缓存路径
            factory.setRepository(new File("D:/tmp"));
            File dir = new File("d:\\download");

            if (!dir.exists()) {
                dir.mkdirs();
            }
            // System.out.print("已经生成临时文件");
            try {
				response.getWriter().write("200");
			} catch (IOException e2) {
				// TODO Auto-generated catch block
				e2.printStackTrace();
			}
            
            ServletFileUpload upload = new ServletFileUpload(factory);
            // 设置上传文件大小的上限,-1表示无上限
            upload.setSizeMax(100000 * 1024 * 1024);
            List items = new ArrayList();
            try {
                // 上传文件,并解析出所有的表单字段,包括普通字段和文件字段
                items = upload.parseRequest(request);
            } catch (FileUploadException e1) {
                System.out.println("文件上传发生错误" + e1.getMessage());
            }
            // 下面对每个字段进行处理,分普通字段和文件字段
            Iterator it = items.iterator();


            while (it.hasNext()) {
                DiskFileItem fileItem = (DiskFileItem) it.next();
                // 如果是普通字段
                if (fileItem.isFormField()) {
//                    System.out.println(fileItem.getFieldName()
//                            + "   "
//                            + fileItem.getName()
//                            + "   "
//                            + new String(fileItem.getString().getBytes("iso8859-1"), "gbk"));
                } else {
                    System.out.println(fileItem.getFieldName() + "   "
                            + fileItem.getName() + "   "
                            + fileItem.isInMemory() + "    "
                            + fileItem.getContentType() + "   "
                            + fileItem.getSize());
                    // 保存文件,其实就是把缓存里的数据写到目标路径下
                    if (fileItem.getName() != null && fileItem.getSize() != 0) {
                        File fullFile = new File(fileItem.getName());
                        File newFile = new File("d:/download/"+num  //拼上num,防止文件名重复
                                + fullFile.getName());
                        try {
                            fileItem.write(newFile);
                            // 设置响应码
                            response.setStatus(200);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    } else {
                        System.out.println("文件没有选择 或 文件内容为空");
                    }
                }
            }

            //上传完毕后手动删除缓存的 文件
            File file = new File("D:/tmp");
            if (file.exists()) {
                File[] listFiles = file.listFiles();
                for (File deleteFile : listFiles) {
                    deleteFile.delete();
                }
            }

           
        }
	}

2.使用spring文件解析器

@RequestMapping("/doSaveBill2.htm")
	public void upload(Integer loginId,HttpServletRequest req,HttpServletResponse resp){
		Map<String,String> result = new HashMap<String, String>();
		File localFile = null;
		//创建通用的多部分解析器
		CommonsMultipartResolver cmr = new CommonsMultipartResolver(req.getSession().getServletContext());
		//判断是否有文件在request中,即多部分请求
		if(cmr.isMultipart(req)){
			//转换成多部分request
			MultipartHttpServletRequest msr = (MultipartHttpServletRequest)req;
			//取得request中所有的文件名
			Iterator<String> iter = msr.getFileNames();
			while(iter.hasNext()){
				//记录上传过程起始时的时间,用来计算上传时间
				long pre = System.currentTimeMillis();
				//取得上传的文件
				MultipartFile file = msr.getFile(iter.next());
				if(file != null){
					//取得当前上传文件的文件名
					String fileName = file.getOriginalFilename();
					//如果文件名不为"",说明该文件存在,否则说明该文件不存在
					if(!"".equals(fileName.trim())){
						//重命名上传后的文件名
						String newFileName = ""+System.currentTimeMillis()+fileName;
						//定义上传路径
						String path = "D:/download" + newFileName;
						localFile = new File(path);
						try {
							file.transferTo(localFile);
						} catch (Exception e) {
							LOGGER.error("文件上传出错");
						}
					}else{
						result.put("code", "2");
						result.put("msg", "文件不存在!");
					}
				}
			}
		}
		
		if(!"2".equals(result.get("code"))){//成功返回200
			result.put("code", "200");
			result.put("msg", "文件上传成功");
		}
		
	}
<!-- 配置文件解析器 -->
 	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding" value="utf-8"></property>
		<!-- 文件上传最大值 10M 1024*1024*10=10485760 -->
		<property name="maxUploadSize" value="10485760"></property>
		<!-- 存在文件的最大值,40K,超过就存在硬盘 -->
		<property name="maxInMemorySize" value="40960"></property>
	</bean>

 

转载于:https://my.oschina.net/MrBamboo/blog/794542

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值