Aet_Leng 2020-08-06 16:26 采纳率: 87.5%
浏览 1139
已采纳

C# HttpWebRequest multipart/form-data提交的文件始终在From中,如何处理

我想通过HttpWebRequest 向一个借口提交数据以及文件

现在接口已经打通,但是无论我如何调整,上传的文件始终在HttpRequest.Form中

我希望在HttpRequest.Files 中看到我上传的文件

   HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(monitor.ReqUrl);
            req.Method = "POST";
            req.Timeout = 2000000;
            req.KeepAlive = false;
             // 边界符
            var boundary = "---------------" + DateTime.Now.Ticks.ToString("x");
            // 边界符
            var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n");
            // 最后的结束符
            var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n");
            // 设置属性
            req.ContentType = "multipart/form-data; boundary=" + boundary;
            //综合内存流
            var memStream = new MemoryStream();
                          // 写入文件
                        const string filePartHeader =
                      "Content-Disposition: form-data; name=\"{0}\";  filename=\"{1}\r\n" +
                       "Content-Type: {2};\r\n\r\n";
                        var header = string.Format(filePartHeader, file.FileName, file.FileName, file.ContentType); 
                         var headerbytes = Encoding.UTF8.GetBytes(header);
                        memStream.Write(headerbytes, 0, headerbytes.Length);
                        var buffer = new byte[1024];
                        int bytesRead; // =0
                        while ((bytesRead = file.InputStream.Read(buffer, 0, buffer.Length)) != 0)
                        {
                            memStream.Write(buffer, 0, bytesRead);
                        }
                                                     // 写入最后的结束边界符
                memStream.Write(endBoundary, 0, endBoundary.Length);
                                   req.ContentLength = memStream.Length;
                memStream.Position = 0;
                var tempBuffer = new byte[memStream.Length];
                memStream.Read(tempBuffer, 0, tempBuffer.Length);
                memStream.Close();
                using (Stream reqStream = req.GetRequestStream())
                {
                    reqStream.Write(tempBuffer, 0, tempBuffer.Length);
                }

Files中没有文件

Form中出现了文件

  • 写回答

2条回答 默认 最新

  • threenewbee 2020-08-07 08:41
    关注

    ContentType要设置为multipart/form-data
    否则在 Forms 里面

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 在codeblocks里主函数运行到打印生成的链表就结束了 没有再往下是为什么呢
  • ¥15 宇视vms-B200-A16@R启动不了,如下图所示,在软件工具搜不到,如何解决?(操作系统-linux)
  • ¥500 寻找一名电子工程师完成pcb主板设计(拒绝AI生成式答案)
  • ¥15 关于#mysql#的问题:UNION ALL(相关搜索:sql语句)
  • ¥15 matlab二位可视化能否针对不同数值范围分开分级?
  • ¥15 已经创建了模拟器但是不能用来运行app 怎么办😭自己搞两天了
  • ¥15 关于#极限编程#的问题,请各位专家解答!
  • ¥20 win11账户锁定时间设为0无法登录
  • ¥45 C#学生成绩管理系统
  • ¥30 matlab appdesigner私有函数嵌套整合