后端(java)获取multipart/form-data传的文件及参数

上一篇说了form-data/multipart请求的请求格式,知道了请求格式就接着说一下里面的数据如何获取。

主要也是最近项目需要文件(图片)和其他参数同时提交。后端需要对数据获取和处理,因为之前没写过这样的接口并且在网上找了一通也没有太多资料所有写起来还是费了不少时间。

下面就帖上我的解析代码,希望能帮到各位老铁

首先multipart/form-data(主要是上传文件),必须要使用post方式才可以请求到;所有的文件和参数在HttpServletRequest 中拿到

public Map<String, String> reciveImageAndParams(HttpServletRequest request) throws Exception {
		
		Map<String, String> uri = new HashMap<String, String>();

		String tempPathDir = "";
		File tempPathDirFile = new File(tempPathDir);

		// 创建工厂
		DiskFileItemFactory factory = new DiskFileItemFactory();
		// 设置缓冲区大小,这里是400kb
		factory.setSizeThreshold(4096 * 100);
		// 设置缓冲区目录
		factory.setRepository(tempPathDirFile);
		// Create a new file upload handler
		ServletFileUpload upload = new ServletFileUpload(factory);
		// 设置上传文件的大小 12M
		upload.setSizeMax(4194304 * 3);
		// 创建解析器
		// 得到所有的文件
		List<FileItem> items = upload.parseRequest(request);
		Iterator<FileItem> i = items.iterator();
		//图片地址拼接
		StringBuffer buf=new StringBuffer();
		String img_urls="";
		int j=0;//防止重名
		while (i.hasNext()) {
			FileItem fi = i.next();
			// false表示文件 否则字段
			if (!fi.isFormField()) {
				String fileName = fi.getName();
				if (fileName != null) {
					// 这里加一个限制,如果不是图片格式,则提示错误. (gif,jpg,jpeg,bmp,png)
					String suffixName = FilenameUtils.getExtension(fileName);
					if ("jpg".equalsIgnoreCase(suffixName) || "jpeg".equalsIgnoreCase(suffixName)
							|| "png".equalsIgnoreCase(suffixName) || "gif".equalsIgnoreCase(suffixName)) {
						
						j++;
						String imageName = System.currentTimeMillis()+j+ "." + suffixName;
						//String imgPath = "e:" + imageName;// 本机
						ConfUtil cf = new ConfUtil();
						String imgPath = cf.getConfig("imgconfig.properties", "imgPath") + imageName;//服务器

						//图片地址拼接
						String img_url=cf.getConfig("imgconfig.properties", "imgurl") + imageName;
						img_urls=buf.append(img_url).append(",").toString();
						// 定义图片流
						InputStream fin = fi.getInputStream();
						// 定义图片输出流
						FileOutputStream fout = new FileOutputStream(imgPath);
						// 写文件
						byte[] b = new byte[1024];
						int length = 0;
						while ((length = fin.read(b)) > 0) {
							fout.write(b, 0, length);
						}
						// 关闭数据流
						fin.close();
						fout.close();

					} else {
						// throw new ProcureException("文件格式不正确");
					}
				}
			} else {
				fi.getString("UTF-8");
				uri.put(new String(fi.getFieldName()),
						new String(fi.getString()));
			}
		}
		if(img_urls!="") {
			
			img_urls=img_urls.substring(0,img_urls.length()-1);
		}
		uri.put("img_urls", img_urls);
		return uri;

	}
发布了94 篇原创文章 · 获赞 23 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Carrots_vegetables/article/details/86595243