2012-11-09 4 views
2

파일 업로드가있는 장고 (Django) 양식이 있습니다. 보기에서 urllib 게시 요청을 사용하여이 파일을 다른 서버로 전달하고 싶습니다.django에서 파일을 원격 서버로 전달 fileupload

이 파일을 이와 같은 일반 게시물 변수에 넣으려고했습니다. 첫 번째 서버에

views.py는 다음 downsteam 서버는 또한 장고 TESTSERVER 경우

def loadfile(request): 
    server_url = "foo" 

    class UploadFileForm(forms.Form): 
     filename = forms.FileField() 
    context['fileform'] = UploadFileForm() 

    #after button is pressed 
    if request.method == 'POST': 
     upload_file(context, server_url, request.FILES['filename']) 

    return render_to_response("bar") 

def upload_file(context, server_url, image_data): 
    #create a temp file to store image on sever 
    temp = tempfile.NamedTemporaryFile() 
    for chunk in image_data.chunks(): 
     temp.write(chunk) 
    temp.flush() 

    #build filename 
    origfilename = str(image_data) 
    extention = origfilename[origfilename.rfind("."):] 
    filename = uuid.uuid4().hex + extention    

    #encode image so it can be send 
    with open(temp.name, "rb") as f: 
     data = f.read() 
     encoded_string = base64.urlsafe_b64encode(data) 
     url = "http://" + server_url + "/uploadimage?filename=" + filename 
     urllib2.urlopen(url, "img_data="+encoded_string) 
    temp.close() 

이 작동하지만, nginx를/uwsgi와 나는 "불량 게이트웨이"오류로 실행합니다. uwsgi의 버퍼 크기가 작기 때문에 이것이라고 생각합니다. 해결책은 적절한 멀티 파트 게시 요청을하는 것입니다.

질문 : 장고 파일 업로드 요청에 따라 여러 부분 urllib 요청을 쉽게 작성하는 방법은 무엇입니까?

url = 'http://httpbin.org/post' 
files = {'file': open('report.xls', 'rb')} 
r = requests.post(url, files=files) 

답변

6

requests 라이브러리를 사용합니다. 매력처럼 작동합니다. 어쩌면 나는 이것을 위해 더 많은 urllib를 대신 할 것이다.
+0

아직 한 것을 발견했으나, : – RickyA

관련 문제