2012-05-29 5 views
2

여기 비동기 적으로 파일을 blobstore에 업로드하려고합니다. 다음은 지금까지 한 일이다goog.net.IframeIo를 사용하여 Python의 Blobstore에 파일을 업로드하는 방법?

html 파일

<form id="my_form" enctype="multipart/form-data" method="POST" 
     action="/partner"> 
    <input type="file" id="my_file" name="my_file"/> 
</form> 

JS 파일을

my.Project.prototype.onFileUpload = function(e) { 
    var uploadForm = /** @type {HTMLFormElement} */ (
      goog.dom.getElement('my_form')); 
    var iframeIo = new goog.net.IframeIo(); 
    goog.events.listen(iframeIo, goog.net.EventType.COMPLETE, function() { alert('request complete'); }); 
    iframeIo.sendFromForm(uploadForm); 

파이썬 코드

class MyHandler(blobstore_handlers.BlobstoreUploadHandler): 
    def post(self): 
    logging.info(self.request) // I can see my file in this line's output 
    upload_files = self.get_uploads('my_file') 
    logging.info(upload_files) //upload_files come out to be an empty array 
    blob_info = upload_files[0] 
    self.redirect('/partner/serve/%s' % blob_info.key()) 

Request 객체에 업로드 할 파일을 얻는 방법에 대한 모든 지침. blobstore의 google tutorial에서 제공하는 python 코드는 here입니다.

이제 막혔습니다. 파이썬 코드로 파일을 가져올 수 있다면 업로드 할 수있을 것입니다. 모든 포인터는 매우 유용합니다.

감사합니다,
Mohit

답변

1

이 정말 iframeio에 대한 질문이 아니라, 단순히 AppEngine에에 업로드하는 방법에 대해. 누락 된 부분은 GET 메서드에서 업로드 할 URL을 만들고 양식의 action 매개 변수로 사용한다는 것입니다. App Engine 문서의 sample application을 참조하십시오.

그래서 귀하의 경우, 당신은 upload_url = blobstore.create_upload_url('/partner')을 수행하고 회신에 대한 등

+0

감사 다니엘 템플릿, <form action="{{ upload_url }}" method="POST" enctype="multipart/form-data">에있는 것입니다. 샘플 애플리케이션에서 URL을 작성하는 이유는 먼저 사용자가 파일 업로드를 용이하게하기 위해 양식이 작성된 MainHandler에 착륙하기를 원하기 때문입니다. 양식이 표시되면 생성 된 URL이 제공됩니다. 제 경우에는 MainHandler를 원하지 않습니다. 그래서 나는 HTML 형식 자체에 action = "URL"을 가졌다. 또한, 원하는 처리기를 성공적으로 공격 할 수 있습니다. 유일한 문제는 요청 개체에서 파일을 가져 오는 것입니다. 이게 내 문제를 좀 더 분명하게 해주기를 바랍니다. – EMM

+0

귀하의 의견을 이해할 수 없습니다. 'create_url'에 의해 반환 된 URL로 POST해야합니다. 그렇지 않으면 업로드가 작동하지 않습니다. AppEngine은 업로드를 처리 한 다음 고유 한 메소드로 전달합니다. –

관련 문제