文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么在c#中利用WebRequest实现一个多文件上传功能

2023-06-14 05:55

关注

本篇文章为大家展示了怎么在c#中利用WebRequest实现一个多文件上传功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

添加引用

使用WebRequest需要添加引用System.Web,否则引入出错。

参数封装

方便起见,我把请求参数进行了封装,代码如下:

namespace EasyHttp.Net.Core{  public class KeyValue  {    public string Key;    public string Value;    public string FilePath;    public string ContentType="*/*";    public KeyValue(string key, string value, string filePath, string contentType)    {      Key = key;      Value = value;      FilePath = filePath;      ContentType = contentType;    }    public KeyValue() { }    public KeyValue(string key, string value, string filePath)    {      Key = key;      Value = value;      FilePath = filePath;    }    public KeyValue(string key, string value)    {      Key = key;      Value = value;    }  }}

KeyValue代表了广义的参数,可以是普通的键值对,也可以是文件参数。

多文件上传封装

public static void ExecuteMultipartRequest(HttpWebRequest request, List<KeyValue> nvc){  Console.WriteLine(request.Headers);  //  log.Debug(string.Format("Uploading {0} to {1}", file, url));  string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");  byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");  HttpWebRequest wr = request;  wr.ContentType = "multipart/form-data; boundary=" + boundary;  wr.Method = "POST";  wr.KeepAlive = true;  wr.Credentials = System.Net.CredentialCache.DefaultCredentials;  using (var rs = wr.GetRequestStream())  {    // 普通参数模板    string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";    //带文件的参数模板    string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";    foreach (KeyValue keyValue in nvc)    {      //如果是普通参数      if (keyValue.FilePath == null)      {        rs.Write(boundarybytes, 0, boundarybytes.Length);        string formitem = string.Format(formdataTemplate, keyValue.Key, keyValue.Value);        byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);        rs.Write(formitembytes, 0, formitembytes.Length);      }      //如果是文件参数,则上传文件      else      {        rs.Write(boundarybytes, 0, boundarybytes.Length);        string header = string.Format(headerTemplate, keyValue.Key, keyValue.FilePath, keyValue.ContentType);        byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);        rs.Write(headerbytes, 0, headerbytes.Length);        using (var fileStream = new FileStream(keyValue.FilePath, FileMode.Open, FileAccess.Read))        {          byte[] buffer = new byte[4096];          int bytesRead = 0;          long total = 0;          while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)          {            rs.Write(buffer, 0, bytesRead);            total += bytesRead;          }        }      }          }    byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");    rs.Write(trailer, 0, trailer.Length);  }}

使用

static void Main(string[] args)    {var request = WebRequest.Create("http://localhost:8080/test/upload") as HttpWebRequest;      List<KeyValue> keyValues = new List<KeyValue>();      keyValues.Add(new KeyValue("key1","param1"));      keyValues.Add(new KeyValue("key2", "param2"));      keyValues.Add(new KeyValue("file","test1.png","image/png"));      keyValues.Add(new KeyValue("file", "test2.png", "image/png"));      EasyHttp.ExecuteMultipartRequest(request,keyValues);    }

上述内容就是怎么在c#中利用WebRequest实现一个多文件上传功能,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯