中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在c#中利用WebRequest實現一個多文件上傳功能

發布時間:2021-03-18 15:16:02 來源:億速云 閱讀:191 作者:Leah 欄目:開發技術

本篇文章為大家展示了怎么在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實現一個多文件上傳功能,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

收藏| 六枝特区| 涡阳县| 阳泉市| 延吉市| 枣阳市| 长岭县| 太原市| 洛南县| 达孜县| 绥芬河市| 防城港市| 衡水市| 西丰县| 邹城市| 庆城县| 江西省| 马关县| 湟中县| 鄂托克旗| 濮阳县| 古浪县| 黔南| 东丽区| 鄂尔多斯市| 闵行区| 福鼎市| 承德市| 综艺| 雅安市| 神农架林区| 广南县| 滦平县| 陇西县| 新兴县| 景德镇市| 原平市| 平利县| 大安市| 九江县| 定西市|