1

이것은 소리가 날 수 있지만 다른 웹 사이트에 파일을 게시해야하는 MVC3 작업 (서버 측 코드)이 있습니다. 두 사이트 모두 제어 할 수 있지만 두 번째 사이트는 게시 된 파일 데이터를 수신하지 않습니다. 나는 성공적으로 원격 사이트에서 파일을 요청하는 WebRequest 클래스를 사용하기 때문에 나는이 방법을 사용하여 파일 데이터를 게시 할 수있는 생각 :하나의 MVC3 작업에서 다른 사이트로 파일 게시

private WebRequest _SetupCopyToRequest(string source, string expectedDestination) 
{ 
    var request = HttpWebRequest.Create(_Settings.CopyToServerUrl); 
    var info = new FileInfo(source); 
    request.Method = "POST"; 
    request.ContentLength = info.Length; 
    request.ContentType = "multipart/form-data"; 
    var dispositionValue = String.Format("form-data; name=\"file\"; filename=\"{0}\"", expectedDestination); 
    request.Headers.Set("Content-Disposition", dispositionValue); 
    using (var destStream = request.GetRequestStream()) 
    { 
     using (var sourceStream = info.OpenRead()) 
     { 
      var length = (int) info.Length; 
      var buffer = new byte[info.Length]; 
      sourceStream.Read(buffer, 0, length); 
      destStream.Write(buffer, 0, length); 
     } 
    } 
    return request; 
} 

내 문제는 수신 사이트의 작업을 최대한 빨리 전화 요청을 수신하는 것입니다 첫 번째 사이트에는 request.GetRequestStream()이고 두 번째 사이트에서는 Request.Files가 비어 있습니다.

[HttpPost]               
public ActionResult CopyToServer() 
{ 
    if (Request.Files.Count == 0 || Request.Files[0].ContentLength == 0) 
     return new ContentResult(); 

    var file = Request.Files[0]; 
    var fileName = Path.GetFileName(file.FileName); 
    var directory = Path.GetDirectoryName(file.FileName); 
    var uniqueFileName = CeoPath.GetUniqueFileName(directory, fileName); 
    var path = Path.Combine(directory, uniqueFileName); 
    file.SaveAs(path); 
    return new ContentResult {Content = path}; 
} 

그래서 첫 번째 사이트의 서버에서 내 파일 데이터가 두 번째 사이트의 서버에 게시 내가합니까 방법 : 다음 두 번째 사이트의 수신 동작에 대한 코드는?

답변

0

HttpWebRequest에 대한 SO 검색으로 내 대답을 찾았습니다. Upload files with HttpWebRequest (multipart/form-data)에이 문제가 발생했습니다. 특히 Upload files using an RFC 1867 POST request with HttpWebRequest/WebClient에 대한 링크. 그래서 첫 번째 방법을 다음 작업 코드로 바꿨습니다.

public string CopyToServer(string source, string expectedDestination) 
{ 
    var file = new UploadFile(source, "file", null); 
    var form = new NameValueCollection(); 
    form["expectedFileName"] = expectedDestination; 
    var request = (HttpWebRequest) WebRequest.Create(_Settings.CopyToServerUrl); 
    var response = HttpUploadHelper.Upload(request, new[] {file}, form); 
    using (var s = response.GetResponseStream()) 
    { 
     using (var sr = new StreamReader(s)) 
     { 
      return sr.ReadToEnd(); 
     } 
    } 
} 

만세!

1

내 생각 엔 당신의 내용 유형은 일을 망치는 것을 - 당신은 당신이 다중 폼 데이터를 보내는 것을 선언하고,하지만 난 당신이 적절한 다중 인코딩 할 경우 표시되지 않습니다 :

http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.2

2

파일을 업로드 할 때 multipart/form-data 인코딩을 사용해야합니다. 단일 파일 업로드의 경우 UploadFile 메서드를 사용하거나 upload multiple files 수있는 기술에 대한 블로그를 작성했습니다.

관련 문제