首页 > 其他分享 >wcf restful 用stream接收表单数据并解析

wcf restful 用stream接收表单数据并解析

时间:2023-11-17 17:14:50浏览次数:34  
标签:stream request FileName openFileDialog file wcf var new restful

1.下载包HttpMultipartParser

 2.服务端代码

 public bool Upload(Stream stream)
        {
            var parser = MultipartFormDataParser.Parse(stream);//解析stream
            var file = parser.Files.First();//获取文件
            string filename = file.FileName;//文件名
            var parameters = parser.Parameters;//获取参数
            Stream data = file.Data;
            string savePath = Path.Combine(Environment.CurrentDirectory, "Downloads");
            if (!Directory.Exists(savePath))
            {
                Directory.CreateDirectory(savePath);
            }
            using (FileStream fs = new FileStream(Path.Combine(savePath, filename), FileMode.Create, FileAccess.ReadWrite, FileShare.None))
            {
                byte[] buffer = new byte[4096];
                int count = 0;
                while ((count = data.Read(buffer,0,buffer.Length))>0)
                {
                    fs.Write(buffer, 0, count);
                }
                fs.Close();
                data.Close();
            }
            return true;
        }

3.测试可用postman等接口测试工具(我这里用的apifox,一样的)

4.在winform中使用

第一种用HttpClient 类上传一个MultipartFormDataContent对象,但是上传的文件名称如果有中文,服务端解析文件名称不正确。

第二种为注释里面的方法(需要安装RestSharp包,我使用的是106版本,使用未发现什么问题)

  private async void btn_open_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                HttpClient http = new HttpClient();
                FileStream file = new FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                // 创建一个 MultipartFormDataContent 对象
                using (MultipartFormDataContent content = new MultipartFormDataContent())
                {
                    var filename = Path.GetFileName(openFileDialog.FileName);
                    // 将 DataStream 属性作为文件流添加到内容中
                    content.Add(new StreamContent(file), "file", openFileDialog.FileName);

                    // 检查响应状态码
                    try
                    {   // 发送 POST 请求并传递类的实例
                        HttpResponseMessage response = await http.PostAsync("http://127.0.0.1:8080/post", content);
                        if (response.IsSuccessStatusCode)
                            MessageBox.Show("POST 请求成功!");
                        //var client = new RestClient("http://127.0.0.1:8080/post");
                        //client.Timeout = -1;
                        //var request = new RestRequest(Method.POST);
                        //request.AddHeader("Accept", "*/*");
                        //request.AddHeader("Host", "127.0.0.1:8080");
                        //request.AddHeader("Connection", "keep-alive");
                        //request.AddHeader("Content-Type", "multipart/form-data; boundary=--------------------------519848749455474480392777");
                        //request.AddFile("file", openFileDialog.FileName);
                        //request.AddParameter("www", "卢本伟牛逼");
                        //IRestResponse response = client.Execute(request);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);

                    }

                }
            }
        }

 

 

 

 

 

 

标签:stream,request,FileName,openFileDialog,file,wcf,var,new,restful
From: https://www.cnblogs.com/zhaosanmao/p/17839192.html

相关文章

  • SAP 发布HTTP接口(RESTful方式)
    发布http接口,以供第三方系统调用 1.se24创建一个类,并继承接口IF_HTTP_EXTENSION,  2.回车后重写方法HANDLE_REQUEST,并添加GET,POST方法(根据自己的需求来)  3.根据实际业务对POST方法进行代码写入methodpost.***json以及内表参数data:it_fybxtyp......
  • JavaSE day08 - Lambda,Stream,File,递归
    JavaSEday08-Lambda,Stream,File,递归今日目标Lambda表达式Stream流File类递归1Lambda表达式1.1体验Lambda表达式packagecom.itheima.lambda_demo;/*Lambda表达式体验:*/publicclassLambdaDemo{publicstaticvoidmain(String[]ar......
  • java8 stream api流式编程
    ......
  • Streamlit 快速构建交互式页面的python库
    基础介绍streamlit是什么Streamlit是一个面向机器学习和数据科学团队的开源应用程序框架,通过它可以用python代码方便快捷的构建交互式前端页面。streamlit特别适合结合大模型快速的构建一些对话式的应用,可以看到一些行业内热门的使用。项目本身也比较成熟,release版本,start数量等都......
  • 流倒序排序_java8 stream多字段排序
      //返回对象集合以类属性一升序排序list.stream().sorted(Comparator.comparing(类::属性一));//返回对象集合以类属性一降序排序注意两种写法list.stream().sorted(Comparator.comparing(类::属性一).reversed());//先以属性一升序,结果进行属性一降序list.stream()......
  • RESTFul 是不是必须的?
    ![[Pastedimage20231114211549.png|600]]问题1:RESTFul是不是必须的,是不是设计API的最优解?RESTFul只是一个风格,作者都承认这只是一种风格,风格就是“可选择的”,“可插拔替换的”,在强度上远远弱于“协议”。凡是上升到协议的东西必须要多方达成一致共识,共同维护且必须遵守,有......
  • Java -- Stream流用法
    1.前言流是Java8API添加的一个新的抽象,称为流Stream,以一种声明性方式处理数据集合,侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式。Stream流是从支持数据处理操作的源生成的元素序列,源可以是数组、文件、集合、函数。流不是集合元素,它不是数据结构并不保存数据......
  • ChatGPT、GPT-4 Turbo接口调用(stream模式)
    接口地址https://chat.xutongbao.top/api/light/chat/createChatCompletion请求方式post请求参数model可选值:“gpt-3.5-turbo-1106”、“gpt-3.5-turbo-16k”、“gpt-4”、“gpt-4-1106-preview”。默认值为:“gpt-3.5-turbo-1106”token获取方式:访问:https://chat.xutongbao.to......
  • Gstreamer rstpsrc 错误:Option not supported (551) 原因及解决办法
    错误产生条件Howtoreproduce:Gstreamer中使用rtspsrc作为输入源播放时,如果摄像头(rtspserver)是如海康(HiKVision)之类的,在尝试断流时,Gstreamer会发送一个GST.PAUSE信号。但是此类摄像头并不支持该操作(没有暂停状态),正确的操作应该是TearDown,参考官方issue。解决方法目前发现......
  • Streamlit项目:基于讯飞星火认知大模型开发Web智能对话应用
    文章目录1前言2API获取3官方文档的调用代码4Streamlit网页的搭建4.1代码及效果展示4.2Streamlit相关知识点5结语1前言科大讯飞公司于2023年8月15日发布了讯飞认知大模型V2.0,这是一款集跨领域知识和语言理解能力于一体的新一代认知智能大模型。前日,博主对讯飞认知大模型......