业务场景:将A服务器的文件推送B服务器。
通过接口上传文件
public class HttpUploadFileUtil {
public static String uploadFile(String url,Map<String,String> map) {
String result = "";
String fileType = map.get("fileType");
String filePath = map.get("filePath");
String fileName = map.get("fileName");
OkHttpClient client = new OkHttpClient();
MultipartBody.Builder builder= new MultipartBody.Builder().setType(MultipartBody.FORM);
for(String key : map.keySet()){
if(!key.equals("fileType")&&!key.equals("filePath")&&!key.equals("fileName")){
builder.addFormDataPart(key,map.get(key));
}
}
builder.addPart( Headers.of("Content-Disposition", "form-data; name=\"file\";filename=\""+fileName+"\""),
RequestBody.create(MediaType.parse(fileType),new File(filePath))
).build();
RequestBody body=builder.build();
Request request = new Request.Builder().url(url).post(body).build();
try {
Response response = client.newCall(request).execute();
result=response.body().string();
System.out.println(response.body().string());
} catch (IOException e) {
e.printStackTrace();
}finally{
return result;
}
}
}
接收文件的代码
@RequestMapping("/uploadFile")
@ResponseBody
public void uploadFile(HttpServletRequest req, HttpServletResponse resp) throws IOException {
MultipartHttpServletRequest multipartRequest =(MultipartHttpServletRequest)req;
Integer sysId = req.getParameter("sysId") == null? 0 : Integer.parseInt(req.getParameter("sysId"));
String userGuid = req.getParameter("userGuid") == null ? "" : req.getParameter("userGuid");
String otherInfo = req.getParameter("otherInfo") == null ? "" : req.getParameter("otherInfo");
String userName = req.getParameter("userName") == null ? "" : req.getParameter("userName");
String video = req.getParameter("isSupportVideo") == null ? "" :req.getParameter("isSupportVideo");
String fileGuid = req.getParameter("fileId") == null ? "" :req.getParameter("fileId");
String fileName = req.getParameter("fileName") == null ? "" :req.getParameter("fileName");
Boolean isSupportVideo = false;
if(StringUtils.isNotBlank(video)){
isSupportVideo = true;
}
resp.setContentType("text/json; charset=utf-8");
BufferedOutputStream outputStream = null;
if (!ServletFileUpload.isMultipartContent(req)) {
resp.getWriter().write("{\"message\":\"该请求中没有文件\"}");
return;
}
InetAddress addr = OperateUtil.getLoaclIP();
String ip=addr.getHostAddress().toString();//获得本机IP
try{
MultipartFile file=multipartRequest.getFile("file");
SysFileCatalog catalog = sysFileCatalogService.queryByIpAndType(ip , isSupportVideo ? MuLuType.VIDEOFILE.getCode() : MuLuType.FILEROOT.getCode());//2.代表正式文件目录
System.out.println("fileGuid-start="+fileGuid);
if (StringUtils.isBlank(fileGuid)) {
fileGuid = UUID.randomUUID().toString();
}
System.out.println("fileGuid-end="+fileGuid);
File up = new File(FileUtil.parsePath(catalog.getCatalogPath() , fileGuid));
if (!up.exists()) {
up.mkdirs();
}
// 文件保存路径
File savedFile = new File(FileUtil.parsePath(catalog.getCatalogPath() , fileGuid) , fileGuid + fileName.substring(fileName.lastIndexOf(".")));
System.out.println("filePath="+savedFile.getPath());
// 转存文件
file.transferTo(savedFile);
Long fileSize=file.getSize();
String fileMd5 = FileUtil.getMD5Checksum(FileUtil.parsePath(catalog.getCatalogPath() , fileGuid) + "/" + fileGuid + fileName.substring(fileName.lastIndexOf(".")));
SysFile entity = new SysFile(fileGuid , fileMd5 , sysId , userGuid , catalog.getCatalogId() , fileName , fileName.substring(fileName.lastIndexOf(".")) , fileSize , System.currentTimeMillis() , 1 , otherInfo , userName);
SysFile fileTemp = sysFileService.queryById(entity.getFileGuid());
if (fileTemp == null) {
sysFileService.save(entity);
} else {
sysFileService.update(entity);
}
resp.getWriter().write("{\"status\":true,\"fileName\":\"" + fileName + "\",\"fileGuid\":\"" + fileGuid + "\",\"fileMd5\":\"" + fileMd5 + "\",\"uploadTime\":\"" + entity.getCreateTime() + "\",\"fileLength\":\"" + entity.getFileLength() + "\"}");
}catch(Exception e){
e.printStackTrace();
if(e!=null){
Logger loger=Logger.getLogger(FileController.class);
loger.error(e.getMessage());
}
resp.getWriter().write("{\"status\":false}");
}
}
使用MultipartHttpServletRequest 需要添加配置