zoukankan      html  css  js  c++  java
  • 用Remoting传输大文件

    近来因为项目需要,我们要做一个像分布式的文件存储一样的方案.所以上网来找了一下资料,常见的解决方案有如下两种:

    1.将文件内容转换成一个Base64编码的字符串.然后调用WebServices或者.Net Remoting 的传输方法.

    2.将文件读到字节数组中,然后传输.

    应该说,这两种方案可以解决大多数的需求 ,可是我总觉得不够理想.将一个5M以上的文件转成Base64编码的String,我觉得不可思议,同样,将一个5M的文件读到内存,10个Request就是50M,100个就是500M,这一个,也不太能接收.

    我希望能有一种更好的解决方案.可是,Stream继承自MarshalByRefObject,是不能直接传输的.我想了很久,终于有了一点灵感,Stream是继承是MarshalByRefObject的,也就是说,我们可以在客户端调Stream的代理.比如上传文件,我们可以先在服务器端执行FileStream fs=new FileStream(config.SavePath+fileName,FileMode.Create),然后将fs的代理传给客户端,这时客户端调用fs.Write(byte),这时内容应该被写到了服务器上了.读取的,同理.

    当然,做为一个为多个应用程序服务的基础服务,返回一个Stream是不合理的.我们应该封装一个Helper方法,来为其它程序服务.

    这目前仅仅是一个想法,明天实践一下.

    我相信,应该会有更优秀的解决方案.

  • 相关阅读:
    服务端获取实际IP工具类
    vue-element-admin整合服务端代理api
    elemengui分页
    vue获取浏览器地址栏参数
    el-table-column动态判断显示性别男女
    nginx代理静态页面添加二级目录
    nginx配置代理指向Redis
    SpringBoot整合Redis日志反复提示Redis重连问题
    centos7安装Redis
    nohup启动jar包
  • 原文地址:https://www.cnblogs.com/bqrm/p/1255942.html
Copyright © 2011-2022 走看看