서버 간 파일 업로드

업무 장면: A 서버의 파일을 B 서버로 전송합니다.
 

public class HttpUploadFileUtil {

    public static String uploadFile(String url,Map 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를 사용하려면 구성을 추가해야 합니다.

좋은 웹페이지 즐겨찾기