首先获取文件
@PostMapping(value = "/uploadFile")
public Result<?> uploadFile(@RequestBody String jsonStr, HttpServletRequest request, HttpServletResponse response) {
Result<?> result = new Result<>();
JSONObject jsonObj = JSONObject.parseObject(jsonStr);
String orderId = String.valueOf(jsonObj.get("orderId"));
String type = String.valueOf(jsonObj.get("type"));
JSONArray json = JSONArray.parseArray(String.valueOf(jsonObj.get("fileList")));
String resultVal = "上传成功";
RequestBaseUrl info = requestBaseUrlService.getInfo();
String actionUrl = info.getUrl3() + "/predictOrderController.do?fileReceive&orderno=" + orderId + "&type=" + type;
for (Object o : json) {
Map<String, File> files = new HashMap<String, File>();
Map map = (Map)o;
String filePath = uploadpath + File.separator + map.get("filePath").toString();
File file = new File(filePath);
if(!file.exists()){
response.setStatus(404);
result.setMessage("保存失败");
result.setSuccess(false);
throw new RuntimeException("文件不存在..");
} else {
files.put(file.getName(), file);
}
try {
resultVal = upLoadFilePost(actionUrl, files);
if("true".equals(resultVal)) {
file.delete();
} else {
resultVal = "上传失败";
result.setSuccess(false);
}
} catch (Exception e) {
e.printStackTrace();
}
}
result.setMessage(resultVal);
return result;
}
传输文件
public String upLoadFilePost(String actionUrl, Map<String, File> files) throws IOException {
String BOUNDARY = java.util.UUID.randomUUID().toString();
String PREFIX = "--", LINEND = "\r\n";
String MULTIPART_FROM_DATA = "multipart/form-data";
String CHARSET = "UTF-8";
URL uri = new URL(actionUrl);
HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
conn.setReadTimeout(15 * 1000);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("connection", "keep-alive");
conn.setRequestProperty("Charsert", "UTF-8");
conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA
+ ";boundary=" + BOUNDARY);
DataOutputStream outStream = new DataOutputStream(
conn.getOutputStream());
if (files != null)
for (Map.Entry<String, File> file : files.entrySet()) {
StringBuilder sb1 = new StringBuilder();
sb1.append(PREFIX);
sb1.append(BOUNDARY);
sb1.append(LINEND);
sb1.append("Content-Disposition: form-data; name=\"file\"; filename=\""
+ file.getKey() + "\"" + LINEND);
sb1.append("Content-Type: application/octet-stream; charset="
+ CHARSET + LINEND);
sb1.append(LINEND);
outStream.write(sb1.toString().getBytes("utf-8"));
InputStream is = new FileInputStream(file.getValue());
byte[] buffer = new byte[1024];
int len = 0;
while ((len = is.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
is.close();
outStream.write(LINEND.getBytes());
}
byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
outStream.write(end_data);
outStream.flush();
int res = conn.getResponseCode();
if (res == 200) {
InputStream in = conn.getInputStream();
InputStreamReader isReader = new InputStreamReader(in);
BufferedReader bufReader = new BufferedReader(isReader);
String line = "";
String data = "";
while ((line = bufReader.readLine()) != null) {
data += line;
}
outStream.close();
conn.disconnect();
return data;
}
outStream.close();
conn.disconnect();
return null;
}
接收附件
@RequestMapping(params="fileReceive")
@ResponseBody
public Boolean fileInteraction(HttpServletRequest request, HttpServletResponse response) throws Exception {
Boolean result = false;
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
Map<String, List<MultipartFile>> fileMap = multiRequest.getMultiFileMap();
for (String key : fileMap.keySet()) {
List<MultipartFile> files = fileMap.get(key);
for (MultipartFile file : files) {
if (!file.isEmpty()) {
String fileNamePath = file.getOriginalFilename();
String[] params = fileNamePath.split("\\.");
String filename = "";
int i = 0;
for (String str : params) {
i = i + 1;
if (StringUtils.isNotEmpty(filename)) {
if (i==params.length) {
filename = filename + "." + str;
}else{
filename = filename + "/" + str;
}
}else{
filename = str;
}
}
String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/wxfile/" + filename;
System.out.println(filePath);
File iFile = new File(filePath);
File iFileParent = iFile.getParentFile();
if(!iFileParent.exists()){
iFileParent.mkdirs();
}
file.transferTo(new File(filePath));
result = true;
}
}
}
return result;
}