2016-12-16 2 views
0

아래 코드를 사용하여 C# console application.It을 사용하여 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에 파일 i가 주어졌다 또한 오류 수익을 업로드하지 않습니다.

+1

'multipart/form-data'가 아닌가요? – Prajwal

+0

"multipart/form-data"파일을 전달해야합니다. –

답변

1

이 질문에 이미 답이 여기있다 : 또한 Upload files with HTTPWebrequest (multipart/form-data)

, 실제로 문자열 "C:/test.csv"하고 파일이 아닌 내용을 전송하는 코드에서 점에 유의하시기 바랍니다! 내용을 스트리밍하려면 FileStream (https://msdn.microsoft.com/en-us/library/system.io.filestream.aspx)을 열어야합니다. (이것은 위 링크 된 답변에서도 다룹니다)

+0

@Stepan 링크로 코드를 시도했지만 파일을 업로드하지 않고 오류도 반환하지 않습니다. –

+0

.net의 최신 버전을 사용한다고 가정하면, 구체적으로이 답변을 시도하십시오. http://stackoverflow.com/a/16925159/3111401 – Stephan

관련 문제