场景一:把某个文件上传到本地的某个目录下
@RequestMapping("/testFile")
public ReturnEntity testFile(@RequestParam("file") MultipartFile file){
if (file.isEmpty()) {
return ReturnEntity.errorMsg("文件为空");
}
// 获取文件名
String fileName = file.getOriginalFilename();
System.out.println("文件名是:" + fileName);
// 获取文件的后缀名
String suffixName = fileName.substring(fileName.lastIndexOf("."));
System.out.println("后缀名是:" + suffixName);
// 文件上传后的路径
String filePath = "F://";
File dest = new File(filePath + fileName);
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
try {
file.transferTo(dest);
return createReturnEntity("上传成功");
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
}
return ReturnEntity.errorMsg("上传失败");
}
场景二:前端通过表单提交文件 后端接收后 把文件上传到指定路径下 并把返回结果返回给前端
@RequestMapping("/uploadSvmRemoteFile")
public ReturnEntity uploadSvmRemoteFile(@RequestParam(value = "file") MultipartFile file) throws IOException {
if (file.isEmpty()) {
return ReturnEntity.errorMsg("请选择一个文件");
}
CloseableHttpClient httpClient = HttpClients.createDefault();
try {
FileBody bin = new FileBody(multipartFileToFile(file));
HttpPost httpPost = new HttpPost(uploadSvmRemoteFile);
HttpEntity reqEntity = MultipartEntityBuilder.create().setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
.setCharset(CharsetUtils.get("UTF-8"))
.addPart("file", bin)//相当于<input type="file" name="media"/>
.build();
// 发送请求 并返回请求的响应
httpPost.setEntity(reqEntity);
CloseableHttpResponse response = httpClient.execute(httpPost);
if (response.getStatusLine().getStatusCode() == 200) {
//获取响应对象
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
String content = EntityUtils.toString(resEntity, Charset.forName("UTF-8"));
JSONObject jsonObject = JSONObject.parseObject(content);
return createReturnEntity(jsonObject.get("data"));
}
}
} catch (Exception e) {
return ReturnEntity.errorMsg("上传附件失败!");
} finally {
httpClient.close();
}
return ReturnEntity.errorMsg("上传附件失败!");
}
private File multipartFileToFile(MultipartFile file) throws Exception {
File toFile = null;
if (file.equals("") || file.getSize() <= 0) {
file = null;
} else {
InputStream ins = null;
ins = file.getInputStream();
toFile = new File(file.getOriginalFilename());
inputStreamToFile(ins, toFile);
ins.close();
}
return toFile;
}
//获取流文件
private static void inputStreamToFile(InputStream ins, File file) {
try {
OutputStream os = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close();
} catch (Exception e) {
e.printStackTrace();
}
}
注意:包别导错了 是个import org.apache.http.entity.mime.HttpMultipartMode; 要不然容易jar包冲突