跨服务器上传文件的方式有很多,其中一种是使用在中间服务器上使用临时文件的方式进行保存后再发送到另一个服务器上,实现文件上传。

问题点:中间保存临时文件,还需要不定时的进行文件清理,比较麻烦

直接进行文件的转发,使用byte[]数组方式直接进行文件转发,然后,服务器根据传递的byte[]数组进行转文件方式,使用httpclient方式将byte[]数组发送到服务端,特别注意的点在于,

发送的时候使用"content-type" = "application/json"发送到服务端,服务端使用@RequestBody byte[] bytes 进行方法接收,其他的一些参数如果还要传递,可以使用header将参数传递过去

package com.rainy.demo.utils;import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.ByteArrayRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;import java.io.IOException;/*** Created by rainy on 2016/12/17.*/
public class UpImgUtils {public static String getPath(String url, String fileType, byte[] bytes) {String path = "";try {PostMethod method = new PostMethod(url);method.setRequestHeader("Content-type" , "application/json");method.setRequestHeader("fileType", fileType);HttpClient httpClient = new HttpClient();method.setRequestEntity(new ByteArrayRequestEntity(bytes));int HttpCode = httpClient.executeMethod(method);if (HttpCode != HttpStatus.SC_OK) {throw new IOException("Invalid HttpStatus: " + HttpCode);}path = method.getResponseBodyAsString();} catch (IOException e) {System.err.println(e.getMessage());}return path;}
}

通常,SpringMVC 中使用 MultipartFile 进行文件上传,通过这样的方法获取到上传过来文件的byte[]数组

@RequestMapping("/upload")
@ResponseBody
public String uploadFile(HttpServletRequest request){MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;MultipartFile file = multipartRequest.getFile("file");byte[] bytes = null;try {bytes = file.getBytes();} catch (IOException e) {e.printStackTrace();}return null;
}

服务器端使用,使用该方法来获取对应的上传文件byte[]数组

public String upLoad(@RequestBody byte[] inputData, HttpServletRequest request) {}

网友使用的byte[]数组转文件的方式,没有试过,不过这个不是重点,重点在于中间转发点,只要能拿到byte[]数组,转文件还是比较容易的

public class T3 {  public static void main(String[] args){  String filePath = "E:\\softoon\\workspace_softoon\\TestMobile\\src\\1.docx";  String outFilePath = "E:\\softoon\\workspace_softoon\\TestMobile\\src";  String outFileName = "2.docx";  getFile(getBytes(filePath),outFilePath,outFileName);  }  /** * 获得指定文件的byte数组 */  public static byte[] getBytes(String filePath){  byte[] buffer = null;  try {  File file = new File(filePath);  FileInputStream fis = new FileInputStream(file);  ByteArrayOutputStream bos = new ByteArrayOutputStream(1000);  byte[] b = new byte[1000];  int n;  while ((n = fis.read(b)) != -1) {  bos.write(b, 0, n);  }  fis.close();  bos.close();  buffer = bos.toByteArray();  } catch (FileNotFoundException e) {  e.printStackTrace();  } catch (IOException e) {  e.printStackTrace();  }  return buffer;  }  /** * 根据byte数组,生成文件 */  public static void getFile(byte[] bfile, String filePath,String fileName) {  BufferedOutputStream bos = null;  FileOutputStream fos = null;  File file = null;  try {  File dir = new File(filePath);  if(!dir.exists()&&dir.isDirectory()){//判断文件目录是否存在
                dir.mkdirs();  }  file = new File(filePath+"\\"+fileName);  fos = new FileOutputStream(file);  bos = new BufferedOutputStream(fos);  bos.write(bfile);  } catch (Exception e) {  e.printStackTrace();  } finally {  if (bos != null) {  try {  bos.close();  } catch (IOException e1) {  e1.printStackTrace();  }  }  if (fos != null) {  try {  fos.close();  } catch (IOException e1) {  e1.printStackTrace();  }  }  }  }
}

整体的使用方式已经写出来了,用在什么地方还需要讨论,不过,这样的实现方式还是很不错的,减少了临时文件的存放,而且,代码量减少很多。

转载于:https://www.cnblogs.com/rainy-shurun/p/6193283.html

跨服务器上传文件方式相关推荐

  1. ASP.NET跨服务器上传文件的相关解决方案

    ASP.NET跨服务器上传文件的相关解决方案 参考文章: (1)ASP.NET跨服务器上传文件的相关解决方案 (2)https://www.cnblogs.com/zuowj/p/3999798.ht ...

  2. 关于nutz跨服务器上传文件

    关于nutz跨服务器上传文件 发布于 578天前  作者 yong9664  770 次浏览  复制  上一个帖子  下一个帖子  标签: 无 是这样的,项目在一台服务器,文件要存储到另外一台服务器. ...

  3. 华为服务器上传文件,云服务器上传文件方式

    云服务器上传文件方式 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器上分别安装数据传 ...

  4. 跨服务器上传文件遇到405 or 409

    跨服务器上传文件405 由于TOMCAT考虑到安全性,默认关闭了TOMCAT的PUT和DELETE请求(即readonly = true). 解决方法:修改Tomcat文件夹下的/conf/web.x ...

  5. tomcat上传文件到不同服务器,使用SpringMVC进行跨服务器上传文件出现的那些坑

    [1] 405 Method Not Allowed 原因是因为Servlet默认是只读的,也就是写不进去(文件上传不过来) 所以要在文件服务器的 web.xml 对 Servlet 进行配置 def ...

  6. mvc api服务器文件上传,springMVC:跨服务器上传文件报409

    上传文件提交后报错如下: HTTP Status 500 – Internal Server Error Type 异常报告 消息 Request processing failed; nested ...

  7. java实现ftp跨服务器上传文件并用html5流媒体播放

    两个服务器:Apache Tomcat和win2008 iis,要能ping通 要求从Tomcat的服务器上传视频文件到iis中,并且客户端浏览器能用流媒体播放,其实并不难,上传的话用ftp,comm ...

  8. python运维实战--跨堡垒机连接二级服务器上传文件

    python运维实战--跨堡垒机连接二级服务器上传文件 paramiko的有关概念和操作 Welcome to Paramiko! - Paramiko documentation 这个python脚 ...

  9. 华为服务器上传文件,服务器上传文件的方式

    服务器上传文件的方式 内容精选 换一换 外部镜像文件在从原平台导出前,没有按照"Windows操作系统的镜像文件限制"的要求完成初始化操作,推荐您使用弹性云服务器完成相关配置.流程 ...

最新文章

  1. poj2154-color-polyan次二面体+欧拉函数优化
  2. ssm 转发请求_SSM框架碰到的问题
  3. 好的技术文章应该让读者更自信而不是更自卑
  4. vs2015 动态链接库问题
  5. 猎户座计划软件测试,三星Exynos4412
  6. web安全测试必须注意的五个方面
  7. 批量查询数据的sql语句
  8. Python求1+2+…+n
  9. distinct和order by冲突
  10. OUC-SE-BLOG1
  11. 用计算机判断函数单调性吗,判断函数单调性的常用方法
  12. 解决Ubuntu 20.04挂载NTFS分区不能写入(只读权限)的问题
  13. [ATPG]解读report_nonscan_cells -summary得到的report
  14. 决胜未来,2019前端开发十大战略性技术布局
  15. 数据分析02-线性回归
  16. 面试 cocos2dx
  17. 解决Silverlight无法调试的问题
  18. mac如何同时录制系统和麦克风声音或只录制系统声音
  19. 绝望的主妇,四位时尚女皇
  20. 若依框架Excel导出时如何添加水印?

热门文章

  1. 盒马鲜生,快而准确的秘密!
  2. 站在巨人肩膀上的意思就是拒绝重复造轮子,分享12个常见的js插件
  3. 像素游戏的动态光影效果
  4. 动效设计中的隐喻-2
  5. 全国 省市 自治区的数据库sql生成
  6. SecureCRT设置背景颜色和目录(文件夹)颜色
  7. acwing 7 混合背包
  8. meta viewport相关
  9. JDK1.7和JDK1.8对于异常的支持
  10. Leetcode 之Evaluate Reverse Polish Notation(41)