2016-12-16 80 views
0

我使用下面的代碼使用C#控制檯應用程序將文件上傳到網址中。它不會上傳文件,也不會返回錯誤。C#應用程序中的應用程序/表單數據?

string[] files = new string []{ "C:/test.csv" }; 


public static string UploadFilesToRemoteUrl(string url, string[] files, NameValueCollection formFields = null) 
    { 
     string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x"); 

     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
     request.ContentType = "multipart/form-data; boundary=" + 
           boundary; 
     request.Method = "POST"; 
     request.KeepAlive = true; 

     Stream memStream = new System.IO.MemoryStream(); 

     var boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + 
                   boundary + "\r\n"); 
     var endBoundaryBytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + 
                    boundary + "--"); 


     string formdataTemplate = "\r\n--" + boundary + 
            "\r\nContent-Disposition: form-data; name=\"{0}\";\r\n\r\n{1}"; 

     if (formFields != null) 
     { 
      foreach (string key in formFields.Keys) 
      { 
       string formitem = string.Format(formdataTemplate, key, formFields[key]); 
       byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem); 
       memStream.Write(formitembytes, 0, formitembytes.Length); 
      } 
     } 

     string headerTemplate = 
      "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + 
      "Content-Type: application/octet-stream\r\n\r\n"; 

     for (int i = 0; i < files.Length; i++) 
     { 
      memStream.Write(boundarybytes, 0, boundarybytes.Length); 
      var header = string.Format(headerTemplate, "uplTheFile", files[i]); 
      var headerbytes = System.Text.Encoding.UTF8.GetBytes(header); 

      memStream.Write(headerbytes, 0, headerbytes.Length); 

      using (var fileStream = new FileStream(files[i], FileMode.Open, FileAccess.Read)) 
      { 
       var buffer = new byte[1024]; 
       var bytesRead = 0; 
       while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) 
       { 
        memStream.Write(buffer, 0, bytesRead); 
       } 
      } 
     } 

     memStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length); 
     request.ContentLength = memStream.Length; 

     using (Stream requestStream = request.GetRequestStream()) 
     { 
      memStream.Position = 0; 
      byte[] tempBuffer = new byte[memStream.Length]; 
      memStream.Read(tempBuffer, 0, tempBuffer.Length); 
      memStream.Close(); 
      requestStream.Write(tempBuffer, 0, tempBuffer.Length); 
     } 

     using (var response = request.GetResponse()) 
     { 
      Stream stream2 = response.GetResponseStream(); 
      StreamReader reader2 = new StreamReader(stream2); 
      return reader2.ReadToEnd(); 
     } 
    } 

Upload files with HTTPWebrequest (multipart/form-data)

我檢查這個代碼,它不會在上傳的URL文件我得到,也沒有錯誤返回。

+1

是不是應該是'multipart/form-data'? – Prajwal

+0

我需要在「multipart/form-data」中傳遞文件 –

回答

1

這個問題已經有了答案已經在這裏: Upload files with HTTPWebrequest (multipart/form-data)

而且,請注意,您的代碼實際上是發送串"C:/test.csv"和文件沒有內容!您需要打開FileStreamhttps://msdn.microsoft.com/en-us/library/system.io.filestream.aspx)才能流出其內容。 (這也包括在上面鏈接的答案中)

+0

@Stepan我已經在鏈接中試過了你的代碼,它沒有上傳文件,也沒有返回錯誤 –

+0

假設你使用的是.net的現代版本,嘗試此答案特別:http://stackoverflow.com/a/16925159/3111401 – Stephan

相關問題