使用HttpWebRequest POST上傳文件


2019/10/27, .Net c#代碼片段

摘要:使用HttpWebRequest向Api接口發送文件,multipart-form數據格式,POST方式
參考地址

/// <summary>
/// HttpWebRequest發送文件
/// </summary>
/// <param name="url">url</param>
/// <param name="filePath">文件路徑</param>
/// <param name="paramName">文件參數名</param>
/// <param name="contentType">contentType</param>
/// <param name="nameValueCollection">其余要附帶的參數鍵值對</param>
public static void HttpUploadFile(string url, string filePath, string paramName, string contentType, NameValueCollection nameValueCollection)
{
    string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
    byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.ContentType = "multipart/form-data; boundary=" + boundary;
    request.Method = "POST";
    request.KeepAlive = true;
    request.Credentials = CredentialCache.DefaultCredentials;
    Stream requestStream = request.GetRequestStream();
    string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
    foreach (string key in nameValueCollection.Keys)
    {
        requestStream.Write(boundarybytes, 0, boundarybytes.Length);
        string formitem = string.Format(formdataTemplate, key, nameValueCollection[key]);
        byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
        requestStream.Write(formitembytes, 0, formitembytes.Length);
    }
    requestStream.Write(boundarybytes, 0, boundarybytes.Length);
    string header = string.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n", paramName, filePath, contentType);
    byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
    requestStream.Write(headerbytes, 0, headerbytes.Length);
    FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
    byte[] buffer = new byte[4096];
    int bytesRead = 0;
    while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
    {
        requestStream.Write(buffer, 0, bytesRead);
    }
    fileStream.Close();
    byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
    requestStream.Write(trailer, 0, trailer.Length);
    requestStream.Close();
    WebResponse webResponse = null;
    try
    {
        webResponse = request.GetResponse();
        Stream responseStream = webResponse.GetResponseStream();
        StreamReader streamReader = new StreamReader(responseStream);
        string result = streamReader.ReadToEnd();
    }
    catch (Exception ex)
    {
        if (webResponse != null)
        {
            webResponse.Close();
            webResponse = null;
        }
    }
    finally
    {
        request = null;
    }
}

使用

NameValueCollection nvc = new NameValueCollection();
nvc.Add("id", "1000");
nvc.Add("name", "user1");
HttpUploadFile("http://your.server.com/upload",@"C:\test\test.jpg", "file", "image/jpeg", nvc);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM