wcf rest 服务用于安卓和ISO调用2-------文件上传

接着上次写.......................

这次利用wcf rest 上传文件.废话不多说.接着写代码.

在上次的接口中添加上传文件方法UpLoad,代码如下:

[WebInvoke(Method = "POST", UriTemplate = "UpLoad/{fileName}",
        ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
        [System.ComponentModel.Description("上传文件")]
        bool UpLoad(System.IO.Stream stream, string fileName);

然后编写接口的方法实现:

 public bool UpLoad(Stream stream, string fileName)
        {
            try
            {
                byte[] buffer = new byte[1024];
                FileStream fs = new FileStream(@"d:\test\" + fileName, FileMode.Create, FileAccess.Write);
                int count = 0;
                while ((count = stream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    fs.Write(buffer, 0, count);
                }
                //清空缓冲区
                fs.Flush();
                //关闭流
                fs.Close();
                return true;
            }
            catch (Exception ex)
            {
                LogHelper.Error("保存文件失败", ex);
                return false;
            }
        }

  这里保存的路径,我就固定到d:\test文件夹下面.然后在浏览器里面查看一下.

  接下来就编写客户端代码进行调用.接着上次的控制台应用程序写.代码如下图

 public static  void UploadFile()
        {
            Console.WriteLine("--------------上传文件----------------");

            HttpClient httpClient = new HttpClient();
            string uri = "http://localhost:31572/Service1.svc/UpLoad/";
            try
            {
                string str;
                do
                {
                    Stopwatch stopwatch = new Stopwatch();
                    Console.WriteLine("请输入上传文件路径:");
                    string filePath = Console.ReadLine();
                    if (!string.IsNullOrEmpty(filePath) && File.Exists(filePath))
                    {
                        string fileName = filePath.Substring(filePath.LastIndexOf("\\", StringComparison.Ordinal)+1);
                        Console.WriteLine("开始上传文件...");
                        Stream fs = new FileStream(filePath, FileMode.Open);
                        HttpContent content = new StreamContent(fs);
                        stopwatch.Start();
                        var response =  httpClient.PostAsync(uri + fileName, content);
                        response.Result.EnsureSuccessStatusCode();
                        Console.WriteLine("文件:{0},上传结果:{1}", fileName, response.Result.Content.ReadAsStringAsync().Result);
                        Console.WriteLine("上传文件所需时间:{0}", stopwatch.ElapsedMilliseconds);
                    }
                    else
                    {
                        Console.WriteLine("请输入正确的文件路径");
                    }
                    Console.WriteLine("y/n是否继续上传?");
                   str = Console.ReadLine();
                } while (str=="y");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                Console.Read();
            }
        }

  最后效果如下图:

下一篇就是soap和rest如何一起使用.

时间: 2024-08-27 10:28:42

wcf rest 服务用于安卓和ISO调用2-------文件上传的相关文章

wcf rest 服务用于安卓和ISO调用1

最近项目中需要编写一个服务,以供安卓和iOS调用.现在记录一下过程.(第一次写博客啊,潜水好久了......) wcf 具体的东西就不多说啦.上步骤和代码.... 首先新建一个wcf项目,新建一个实体类.代码如下 [DataContract] public class Users { [DataMember] public string Id { get; set; } [DataMember] public string Name { get; set; } [DataMember] publ

wcf rest 服务用于安卓和ISO调用5-------验证

年过完了...... 网上看到的一个验证方法,这里记录一下.直接上代码 先编写server验证方法 /// <summary> /// 校验是否有权限访问 /// </summary> /// <returns></returns> private bool CheckIsCheckAuthorization() { //获得当前web操作上下文 WebOperationContext woc = WebOperationContext.Current; /

angulaijs中的ng-upload-file与阿里云oss服务的结合,实现在浏览器端上传文件到阿里云(速度可以达到1.5M)

angularjs结合aliyun浏览器端oos文件上传加临时身份验证例子 在服务端获取sts 源码: public class StsServiceSample { // 目前只有"cn-hangzhou"这个region可用, 不要使用填写其他region的值 //<setting name="accessKeyId" value="H6JSh0Y****z2cGa" /> //<setting name="ecr

MVC+WCF框架下广告位管理——文件上传

广告位是网站中必不可少的内容之一,也是能直接给我们网站带来经济收益的内容之一.好的广告位不仅不会强宾压主,而会为我们的网站锦上添花,起到画龙点睛的作用,因此设计好广告位也是开发过程中一大重要环节. 最近在做一个珠宝检测站的项目,其中管理页面就涉及到了广告位管理,之前项目中也有不少有广告位的,但都不是自己负责.其大致思路就是要从管理页面上传相应的图片,并且要保存到数据库,然后从所有上传过的图片中选择一张显示到网站首页.原理并不太难,但是鉴于性能问题,我们只需要数据库保存图片的路径即可. 重点是在M

文件上传更新服务相关

需求: 客户端向服务端发送一次请求,请求是一系列配置文件的文件名.当前客户端所持有文件的版本号.期待服务端返回的数据形式(url或二进制数据).当请求的配置文件有更新,服务端返回相应的url或二进制数据.之所以要分url和二进制数据,因为有的配置文件比较小且比较重要需要马上获取到数据:而有的配置文件稍微大一些,重要性比较低,可以在客户端拉线程慢慢下. 最终实现: 分为后台管理系统(负责文件上传)和数据更新服务. 文件上传部分是用Vue.js+KOA实现.其中关于文件上传那块,浏览器端使用Ajax

基于 lua-resty-upload 实现简单的文件上传服务

今天了解了一下 lua-resty-upload 模块,并基于 lua-resty-upload 模块简单实现了一个基本的表单文件上传服务. lua-resty-upload 在 github 上的项目地址为: https://github.com/openresty/lua-resty-upload 从实现可以看到,其实 upload 服务的实现还是比较简单的,就一个源文件 lualib/resty/upload.lua,总的代码行数也只有 300 行不到. 下面我整理了一下搭建文件上传服务的

C#post调用接口并上传文件

/// <summary> /// C#调用接口上传json数据,并且带文件上传 /// </summary> /// <param name="url">接口地址</param> /// <param name="filePath">文件路径</param> /// <returns></returns> public string RequestPost(string

wcf文件上传时碰到的配置问题

1.远程服务器返回了意外相应:(413) Request Entity Too Large 修改客户端配置maxReceivedMessageSize="2147483647" <bindings> <basicHttpBinding> <binding name="BasicHttpBinding_WcfService" maxBufferSize="2147483647" maxReceivedMessageSi

如何将ISO文件上传到XenServer本地存储中

如何将ISO文件上传到XenServer本地存储中 从XenServer5.0.0之后ISO文件不能直接拷贝到/opt/xensource/packages/目录下,该目录下只能用于存放Xenserver Tools文件,那当用户要挂载ISO进行虚拟机安装时有什么方法呢?有两种方法: 一.通过CIFS挂载Windows共享文件夹的方式,这种方式操作简单,通过XenCenter的New Storage向导即可完成(操作略),而且当ISO较多且变动频繁时,强力推荐该种方法 二.将ISO文件直接上传到