Android上传单文件和多文件(后台使用MultipartFile)
16lz
2021-12-04
android代码:
package heath.com.microchat.utils;import android.util.Log;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.HttpVersion;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.mime.MultipartEntity;import org.apache.http.entity.mime.content.ContentBody;import org.apache.http.entity.mime.content.FileBody;import org.apache.http.entity.mime.content.StringBody;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.params.CoreProtocolPNames;import org.apache.http.protocol.HTTP;import org.apache.http.util.EntityUtils;import java.io.File;import java.nio.charset.Charset;import java.util.List;import heath.com.microchat.service.ServiceRulesException;public class UploadServerUtils { public static String uploadLogFile(String uploadUrl, String filePath, String folderPath) { String result = null; try { HttpClient hc = new DefaultHttpClient(); hc.getParams().setParameter( CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1); HttpPost hp = new HttpPost(uploadUrl); File file = new File(filePath); final MultipartEntity entity = new MultipartEntity(); ContentBody contentBody = new FileBody(file); entity.addPart("file", contentBody); entity.addPart("folderPath", new StringBody(folderPath, Charset.forName("UTF-8"))); hp.setEntity(entity); HttpResponse hr = hc.execute(hp); HttpEntity he = hr.getEntity(); int statusCode = hr.getStatusLine().getStatusCode(); if (statusCode != HttpStatus.SC_OK) throw new ServiceRulesException(Common.MSG_SERVER_ERROR); result = EntityUtils.toString(he, HTTP.UTF_8); } catch (Exception e) { e.printStackTrace(); Log.e("TAG", "文件上传失败!上传文件为:" + filePath); Log.e("TAG", "报错信息toString:" + e.toString()); } return result; } public static String uploadLogFiles(String uploadUrl, List filePaths, String folderPath) { String result = null; try { HttpClient hc = new DefaultHttpClient(); hc.getParams().setParameter( CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1); HttpPost hp = new HttpPost(uploadUrl); final MultipartEntity entity = new MultipartEntity(); for (String filePath:filePaths){ File file = new File(filePath); ContentBody contentBody = new FileBody(file); entity.addPart("files", contentBody); } entity.addPart("folderPath", new StringBody(folderPath, Charset.forName("UTF-8"))); hp.setEntity(entity); HttpResponse hr = hc.execute(hp); HttpEntity he = hr.getEntity(); int statusCode = hr.getStatusLine().getStatusCode(); if (statusCode != HttpStatus.SC_OK) throw new ServiceRulesException(Common.MSG_SERVER_ERROR); result = EntityUtils.toString(he, HTTP.UTF_8); } catch (Exception e) { e.printStackTrace(); Log.e("TAG", "文件上传失败!上传文件为:" + filePaths.toString()); Log.e("TAG", "报错信息toString:" + e.toString()); } return result; }}
后台代码及环境:
环境:tomcat8.5及以上,需要commons-fileupload-1.3.1.jar、commons-io-2.4.jar两个jar包;
本上传使用SSM框架,所以在springmvc.xml文件配置:
后台代码:
本上传示例,本人使用的是前端传入上传路劲,不在后台定死路劲。
package org.heath.controller;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.HashMap;import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.heath.utils.RandomCode;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.multipart.MultipartFile;import net.sf.json.JSONArray;@Controller@RequestMapping("upload")@ResponseBodypublic class UploadController { @RequestMapping("fileUpload.action") private String fileUpload(HttpServletRequest request, @RequestParam("file") MultipartFile file, @RequestParam("folderPath") String folderPath) throws IOException { String fileName = "error"; try { fileName = file.getOriginalFilename(); fileName = "MicroChat_" + RandomCode.getRandomCode() + "_" + fileName; folderPath = request.getServletContext().getRealPath(folderPath); InputStream input = file.getInputStream(); File folder = new File(folderPath); judeDirExists(folder); OutputStream outputStream = new FileOutputStream( folderPath + File.separator + fileName); byte[] b = new byte[1024]; while ((input.read(b)) != -1) { outputStream.write(b); } input.close(); outputStream.close(); return fileName; } catch (Exception e) { e.printStackTrace(); return "error"; } } @RequestMapping("filesUpload.action") private Map filesUpload(HttpServletRequest request, @RequestParam("files") MultipartFile[] files, @RequestParam("folderPath") String folderPath) throws IOException { JSONArray fileNames = new JSONArray(); Map returnMap = new HashMap(); folderPath = request.getServletContext().getRealPath(folderPath); try { for (int i = 0; i < files.length; i++) { String fileName = files[i].getOriginalFilename(); fileName = "MicroChat_" + RandomCode.getRandomCode() + "_" + fileName; InputStream input = files[i].getInputStream(); File folder = new File(folderPath); judeDirExists(folder); OutputStream outputStream = new FileOutputStream( folderPath + File.separator + fileName); byte[] b = new byte[1024]; while ((input.read(b)) != -1) { outputStream.write(b); } input.close(); outputStream.close(); fileNames.add(fileName); } returnMap.put("code", "200"); returnMap.put("msg", "success"); returnMap.put("fileNames", fileNames); return returnMap; } catch (Exception e) { e.printStackTrace(); returnMap.put("code", "414"); returnMap.put("msg", "error"); return returnMap; } } // 判断文件夹是否存在 public static void judeDirExists(File file) { if (file.exists()) { if (file.isDirectory()) { System.out.println("dir exists"); } else { System.out.println("the same name file exists, can not create dir"); } } else { System.out.println("dir not exists, create it ..."); file.mkdir(); } }}
文件及jar下载地址:https://download.csdn.net/download/qq_32090185/10930145
有不懂的地方,可以留言,我看到会进行回复。
更多相关文章
- android访问电话号码和电子邮箱
- android studio Listview简单实例
- android CVE 漏洞汇总
- qemu 0.9.1 与 android 环境编译
- android 代码设置间距
- Android屏蔽Home键
- Android获取基站坐标代码
- Android(安卓)静默安装apk
- 学习日记-- Android写文件到SDCard的代码