一般情况下wcf用webHttpBinding协议最多的场景就是前后端Json交互,会比较轻量级。

接收上传的文件也可以,不过要自己解析处理。

前端HTML很简单:

  1. <input type="file" id="excel"/>
  2. <div class="btn btn-primary" ng-click="upFile()">上传文件</div>

前端JS也很简单:

  1. $scope.upFile = function () {
  2. var form = new FormData();
  3. var file = document.getElementById("excel").files[0];
  4. form.append('file', file);
  5. $http.post('/SvcWms/InDepot/UpFile', form).then(function (data) {
  6. if(data.data.State === 1){
  7. console.log('upload success');
  8. }
  9. });
  10. };

后台接口定义:

  1. [WebInvoke(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
  2. DtoResponse<bool> UpFile(Stream file);

接口实现:

  1. public class DtoResponse<T>
  2. {
  3. public int State { get; set; } = ;
  4. public string Msg { get; set; }
  5. public T Data { get; set; }
  6. }
  7.  
  8. public DtoResponse<bool> UpFile(Stream file)
  9. {
  10. using (MemoryStream ms = new MemoryStream())
  11. {
  12. file.CopyTo(ms);
  13. ms.Position = ;
  14. using (StreamReader sr = new StreamReader(ms))
  15. {
  16. int firstLineLen = Encoding.UTF8.GetBytes(sr.ReadLine()??"").Length;
  17. var position = firstLineLen + ;
  18. var line = sr.ReadLine();
  19. var filename = DateTime.Now.ToString("yyMMdd.HHmmss.");
  20.  
  21. if(!string.IsNullOrEmpty(line)) {
  22. int idx = line.IndexOf("filename", StringComparison.CurrentCultureIgnoreCase);
  23. filename += line.Substring(idx + ).Replace("\"", "");
  24. }
  25.  
  26. while (line != null)
  27. {
  28. // 特别是第二行含文件名称,可能含中文,所以不能直接用line.Length
  29. // 因为line.Length是字符个数,不是字节个数
  30. position += Encoding.UTF8.GetBytes(line).Length + ;
  31. if (line == "")
  32. break;
  33. line = sr.ReadLine();
  34. }
  35. ms.Position = position;
  36. ms.SetLength(ms.Length - (firstLineLen + ));
  37.  
  38. var uploadStream = new MemoryStream();
  39. ms.CopyTo(uploadStream);
  40. uploadStream.Position = ;
  41.  
  42. File.WriteAllBytes($"d:\\{filename}", uploadStream.ToArray());
  43. }
  44. }
  45. return new DtoResponse<bool>() {State = };
  46. }

WCF webHttpBinding协议上传接收文件的更多相关文章

  1. WCF利用Stream上传大文件

    WCF利用Stream上传大文件 转自别人的文章,学习这个例子,基本上wcf也算入门了,接口用法.系统配置都有了 本文展示了在asp.net中利用wcf的stream方式传输大文件,解决了大文件上传问 ...

  2. asp.net文件上传接收不到文件 Request.files["']等于null

    这个时候你应该检查下你的form表单里面是否配置了这个: enctype ="multipart/form-data"  新手容易出错哦. <form id="fo ...

  3. 通过HTTP协议上传文件

         HTTP是很常见的协议,虽然用得很多,但对细节的了解却是很浅,这回通过向服务端上传文件信息来理解细节.网络库的选择:1.WinHTTP是windows下常用的库:2.CURL是广受喜爱的开源 ...

  4. RPC基于http协议通过netty支持文件上传下载

    本人在中间件研发组(主要开发RPC),近期遇到一个需求:RPC基于http协议通过netty支持文件上传下载 经过一系列的资料查找学习,终于实现了该功能 通过netty实现文件上传下载,主要在编解码时 ...

  5. WCF上传下载文件

    思路:上传时将要上传的文件流提交给服务器端 下载时只需要将服务器上的流返回给客户端即可 1.契约,当需要传递的数量多于一个时就需要通过messagecontract来封装起来 这里分别实现了上传和下载 ...

  6. C#实现http协议支持上传下载文件的GET、POST请求

    C#实现http协议支持上传下载文件的GET.POST请求using System; using System.Collections.Generic; using System.Text; usin ...

  7. Android用http协议上传文件

    http协议上传文件一般最大是2M,比较适合上传小于两M的文件   [代码] [Java]代码   001import java.io.File;  002import java.io.FileInp ...

  8. c++使用http协议上传文件到七牛云服务器

    使用c++ http协议上传文件到七牛服务器时,比较搞的一点就是header的设置: "Content-Type:multipart/form-data;boundary=xxx" ...

  9. 【WCF】利用WCF实现上传下载文件服务

    引言     前段时间,用WCF做了一个小项目,其中涉及到文件的上传下载.出于复习巩固的目的,今天简单梳理了一下,整理出来,下面展示如何一步步实现一个上传下载的WCF服务. 服务端 1.首先新建一个名 ...

随机推荐

  1. 在AbpZero中hangfire后台作业的使用——开启hangfire

    AbpZero框架已经集成了hangfire,但它默认是关闭的,我们可以在运行站点下的Startup.cs文件中把这行代码注释取消就行了,代码如下:     //Hangfire (Enable to ...

  2. 【加密算法】DES

    一.简介 DES对称加密,是一种比较传统的加密方式,其加密运算.解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码),是一种对称加密算法. ...

  3. js:实现自定义事件对象接口

    网易2017内推笔试题 要求: 请实现下面的自定义事件Event对象的接口,功能见注释(测试1) 该Event对象的接口需要能被其他对象拓展复用(测试2) //测试1 Event.on('test', ...

  4. 第五章 ReentrantLock源码解析1--获得非公平锁与公平锁lock()

    最常用的方式: int a = 12; //注意:通常情况下,这个会设置成一个类变量,比如说Segement中的段锁与copyOnWriteArrayList中的全局锁 final Reentrant ...

  5. JVM伪共享

    CPU缓存中的cache line缓存行是缓存的最小单位,同一个时刻内只允许一个cpu内核进行操作.一般,缓存行的大小为64字节,这样的大小可以存放多个java对象的对象头.因此,当两个不同的线程同时 ...

  6. Day 41 线程

    进程只能在同一个时间干一件事情,如果想同时干两件或者多件事情,进程就无能为力了. 进程在执行过程中如果阻塞,整个进程就会挂起,即使进程中有些工作不依赖于输入的数据,也将无法执行. 一是由于进程是资源的 ...

  7. numpy 数组相减

    a与b的每一列相减

  8. 667. Beautiful Arrangement II

    Given two integers n and k, you need to construct a list which contains n different positive integer ...

  9. Chrome浏览器插件开发-淘宝自动登录

    浏览器插件的介绍 Chrome浏览器插件开发的准备工作 manifest.json配置介绍 页面如何注入scripts文件 一. 浏览器插件的介绍 浏览器插件是一种遵循一定规范的应用程序接口编写出来的 ...

  10. 点分治&&动态点分治学习笔记

    突然发现网上关于点分和动态点分的教程好像很少……蒟蒻开篇blog记录一下吧……因为这是个大傻逼,可能有很多地方写错,欢迎在下面提出 参考文献:https://www.cnblogs.com/LadyL ...