2016-12-16 4 views
0

私はC#コンソールアプリケーションを使用してURLにファイルをアップロードするために以下のコードを使用しています。ファイルをアップロードせず、エラーも返しません。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

関連する問題