2011-08-31 2 views
1

로컬 파일을 웹 서버에 업로드하는 데 WebClient.UploadFileAsync을 사용하고 있으며 게시와 함께 일부 매개 변수도 전달하고 싶습니다. 업로드 된 파일을 저장할 위치의 PHP 특정 위치에 PHP 코드를 알려주는 몇 가지 필드를 보내고 싶습니다. WebClient.UploadFileAsync를 사용하여 파일과 POST 매개 변수를 업로드하는 방법은 무엇입니까?

나는 예를 들어, URL에 직접 필드를 넣어 시도 :

WebClient client = new WebClient(); 
Uri uri = new Uri("http://example.com/upload.php?field1=test"); 
client.UploadFileAsync(uri, "POST", "c:\test.jpg"); 

PHP 코드는 isset($_REQUEST['field1'])에 대해 false를 반환합니다.

주셔서 감사합니다.

NOTE: this question was also asked in very similar format for vb.net a while back, but it did not get any answers,

+1

무엇이 잘못되었는지 설명해야합니다. "도움이되지 않았습니다"라는 정보가 충분하지 않습니다. –

+0

추천 해 주셔서 감사합니다. 질문이 수정되었습니다. –

+0

네트워크 트래픽이 어떤지 알아보기 위해 Wireshark를 통해 살펴 본다면 어떨까요? –

답변

0

This article 업로드 파일은 웹 클라이언트를 사용하는 동안 필드의 게시물을 달성하기 위해 필요한 사항에 대한 내용이수록 비슷한 일을 http://www.codeproject.com/KB/cs/uploadfileex.aspx?display=Print 를 참조하십시오.

불행하게도 대부분의 파일 업로드 시나리오는 HTML 형식을 기반으로하며 에는 파일 데이터 외에 양식 필드가 포함될 수 있습니다. 이것은 WebClient가 떨어지는 곳입니다. WebClient의 소스 코드를 검토 한 결과 파일을 다시 업로드하여 추가 양식 필드를 포함하여 파일 업로드를 수행 할 가능성이 없음이 분명합니다.

그래서, 유일한 옵션은 RFC1867, rfc2388 및 추가 양식 필드와 파일 업로드를 활성화하고 쿠키와 헤더의 제어를 노출 할 W3C 다중/폼 데이터 사양 을 준수하는 사용자 정의 구현을 만드는 것입니다.

0

는 웹 클라이언트의 요청을 UploadFile는 일부로 ([] 바이트 등)에만 파일을 전송하도록 설계된다. 내 이해에서 UploadFile 메서드는 바이너리를 작성한 후 요청 스트림을 닫습니다.

시나리오에서 실제로 요청하는 부분은 1. 파일을 바이트 []로 2. 파일 이름을 문자열로 지정합니다.

이렇게하려면 HttpWebRequest 또는 요청을 만들 수있는 다른 상위 수준 클래스를 사용해야합니다.

는 포스트

관련 문제