服务器间的文件上传

业务场景:将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 需要添加配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值