2015-01-26 3 views
1

브라우저 작업을 시뮬레이션하려고합니다. 내가 브라우저에서 이미지를 전송하고있어 언제이미지가로드 될 때 MultiValueDict가 비어 있습니다.

<MultiValueDict: {u'file': [<InMemoryUploadedFile: 1.jpg (image/jpeg)>]}> 

내가 백 엔드 POST 요청에서 이미지를 전송하는 경우 있음을 request.FILES 얻을 :

import httplib 
conn = httplib.HTTPConnection(HOST, PORT) 
headers = {"Content-type": "application/x-www-form-urlencoded",  "Accept": 'text/plain', 
"Cookie": cookies, 'X_REQUESTED_WITH': 'XMLHttpRequest'} 
conn.request("POST", "/upload/%s" % storyId, open("pictures/1.jpg"), headers) 
response = conn.getresponse() 

내가 얻을 :

<MultiValueDict: {}> 

은 무엇입니까 잘못된?

답변

0

broswer에서 파일을 보낼 때 Content Type 헤더는 multipart/form-data입니다. application/x-www-form-urlencoded이 아니라 파일을 보낼 때 요청에 다른 변경 사항이 있습니다. 브라우저에서 파일을 전송할 때 요청 헤더가 어떻게 표시되는지 살펴 보겠습니다.

POST /upload?upload_progress_id=12344 HTTP/1.1 
Host: localhost:3000 
Content-Length: 1325 
Origin: http://localhost:3000 
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryePkpFF7tjBAqx29L 
<other headers> 

------WebKitFormBoundaryePkpFF7tjBAqx29L 
Content-Disposition: form-data; name="MAX_FILE_SIZE" 

100000 
------WebKitFormBoundaryePkpFF7tjBAqx29L 
Content-Disposition: form-data; name="uploadedfile"; filename="hello.o" 
Content-Type: application/x-object 

<file data> 
------WebKitFormBoundaryePkpFF7tjBAqx29L-- 

당신이 stackoverflow answer

에 더 많은 읽을 수 있습니다 여기에, 당신은 제대로 브라우저 파일 요청을 "시뮬레이션"되지 않습니다 말했다.