C# 采用HttpWebRequest 自定義頭信息 上傳文件


剛實習的時候遇到一個問題:上傳文件的URL有特定格式限制,需要按格式定義頭信息,才能上傳成功。查資料時候當時好像是java版本的,C#代碼貼上。

//uploadFile:上傳文件名    groupId:GUID
public string FileUpload(string uploadFile, string groupId)
{
    //從流中讀取字節塊並將該數據寫入給定緩沖區buffer中
    FileStream fileStream = new FileStream(uploadFile, FileMode.Open, FileAccess.Read);
    Byte[] buffer = new Byte[fileStream.Length];
    fileStream.Read(buffer, 0, Convert.ToInt32(fileStream.Length));

    //boundary setting 
    string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
    string fileName = Path.GetFileName(uploadFile);
    string nameOnly = fileName.Substring(0, fileName.LastIndexOf("."));

    Dictionary<string, string> Params = new Dictionary<string, string>();
    Params.Add("name", fileName);
    Params.Add("groupId", groupId);
    Params.Add("appModule", "portal");
    Params.Add("filePath", "");
    Params.Add("thumbnail", "true");
    Params.Add("storeType", "1");
    Params.Add("property1", "");
    Params.Add("property2", "");
    Params.Add("property3", "");
    Params.Add("property4", "");
    Params.Add("property5", "");
    Params.Add("flag", "false");

    StringBuilder sb = new StringBuilder();

    //發送必要字段
    foreach (KeyValuePair<string, string> param in Params)
    {
        sb = sb.Append("--");
        sb = sb.Append(boundary);
        sb = sb.Append("\r\n");
        sb = sb.Append("Content-Disposition: form-data; name=\"" + param.Key + "\"\r\n\r\n");
        sb = sb.Append(param.Value);
        sb = sb.Append("\r\n");
    }

    //要發送的文件
    sb = sb.Append("--");
    sb = sb.Append(boundary);
    sb = sb.Append("\r\n");
    sb = sb.Append("Content-Disposition: form-data; name=\"" + nameOnly + "\"; filename=\"" + fileName + "\"\r\n");
    sb = sb.Append("Content-Type: application/octet-stream\r\n\r\n");

    byte[] data = Encoding.Default.GetBytes(sb.ToString());

    byte[] end_data = Encoding.Default.GetBytes(("\r\n--" + boundary + "--\r\n"));

    Uri uri = new Uri("上傳文件地址");

    HttpWebRequest webRequset = (HttpWebRequest)WebRequest.Create(uri);
    webRequset.ContentType = "multipart/form-data; boundary=" + boundary;
    webRequset.Method = "POST";
    
    //長度屬性:頭+文件流+尾的長度
    long length = data.Length + buffer.Length + end_data.Length;
    webRequset.ContentLength = length;

    Stream requestStream = webRequset.GetRequestStream();
    //將拼接的數據和文件流寫入
    requestStream.Write(data, 0, data.Length);
    requestStream.Write(buffer, 0, buffer.Length);
    requestStream.Write(end_data, 0, end_data.Length);
    //獲取返回信息
    WebResponse responce = webRequset.GetResponse();
    Stream responeStream = responce.GetResponseStream();
    StreamReader sr = new StreamReader(responeStream);

    return sr.ReadToEnd();
}

 


免責聲明!

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



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