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")
@ResponseBody
public 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
有不懂的地方,可以留言,我看到会进行回复。