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

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

前端HTML很简单:

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

前端JS也很简单:

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

后台接口定义:

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

接口实现:

    public class DtoResponse<T>
{
public int State { get; set; } = ;
public string Msg { get; set; }
public T Data { get; set; }
} public DtoResponse<bool> UpFile(Stream file)
{
using (MemoryStream ms = new MemoryStream())
{
file.CopyTo(ms);
ms.Position = ;
using (StreamReader sr = new StreamReader(ms))
{
int firstLineLen = Encoding.UTF8.GetBytes(sr.ReadLine()??"").Length;
var position = firstLineLen + ;
var line = sr.ReadLine();
var filename = DateTime.Now.ToString("yyMMdd.HHmmss."); if(!string.IsNullOrEmpty(line)) {
int idx = line.IndexOf("filename", StringComparison.CurrentCultureIgnoreCase);
filename += line.Substring(idx + ).Replace("\"", "");
} while (line != null)
{
// 特别是第二行含文件名称,可能含中文,所以不能直接用line.Length
// 因为line.Length是字符个数,不是字节个数
position += Encoding.UTF8.GetBytes(line).Length + ;
if (line == "")
break;
line = sr.ReadLine();
}
ms.Position = position;
ms.SetLength(ms.Length - (firstLineLen + )); var uploadStream = new MemoryStream();
ms.CopyTo(uploadStream);
uploadStream.Position = ; File.WriteAllBytes($"d:\\{filename}", uploadStream.ToArray());
}
}
return new DtoResponse<bool>() {State = };
}

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. VS开发Windows服务

    转自:https://www.cnblogs.com/xujie/p/5695673.html

  2. 微信退款证书使用c#

    微信退款需要证书 data为已封装好的xml数据 具体怎么封装>打开 public string get(string data) { string cert = @"D:\certi ...

  3. openvswitch datapath 内核态流表创建过程(ovs_flow_cmd_new)

    datapath流表更新的入口函数都定义在dp_flow_genl_ops中,流表创建的入口函数是ovs_flow_cmd_new函数,通过该函数,我们可以一窥流表相关信息的建立. 1.ovs_flo ...

  4. Python(多进程multiprocessing模块)

    day31 http://www.cnblogs.com/yuanchenqi/articles/5745958.html 由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分 ...

  5. 通过IntelliJ IDEA创建maven+springmvc+mybatis项目

    第一个springmvc+mybatis项目,通过学习极客学院视频(视频案例通过eclipse搭建,网址为http://www.jikexueyuan.com/course/1430.html),发现 ...

  6. [转][SQL]如何实现存储过程中动态加入条件---没想到语句可以这么巧妙

    在存储过程过程中,如果要实现Select查询的where子句动态查询,可以用exec ( "select .... where" +@whereStr)这样的方式.但这样的话,感觉 ...

  7. 一:My Batis快速入门

    ---恢复内容开始--- 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检 ...

  8. POJ 2371

    #include<iostream> #include<stdio.h> #include<string> using namespace std; int com ...

  9. js delete删除对象属性,delete删除不了变量及原型链中的变量

    js delete删除对象属性,delete删除不了变量及原型链中的变量 一.delete删除对象属性 function fun(){ this.name = 'gg'; } var obj = ne ...

  10. js04

    接着看一些js的基础,这里主要说一下js的对象. 1.对象:    js中的所有事物都可以看作是对象:字符串.数值.数组.函数...    内建对象:String    Date    Array   ...