2010-11-24 6 views
1

이 내 코드의 upload.py입니다에 HTML5를 사용하여 무티 파일을 업로드하는방법 구글 애플 리케이션 엔진 (파이썬)

<form enctype="multipart/form-data" action="/" method="post"> 
    <input type="file" name="file" multiple="true" /> 
    <input type="submit" /> 
</form> 

당신이 할 수있는 file = self.request.POST['file']을 사용하여 하나의 파일을 얻으시겠습니까? html5 muti 파일을 사용하여

게시 할 때 파이썬을 사용하여 muti 파일을 얻는 방법은 무엇입니까?

감사

지금,이 문서에 따라 확인한다

업로드 : Receive multi file post with google app engine

class Download_file(db.Model): 
    data = db.BlobProperty(required=True) 
    mimetype = db.StringProperty(required=True) 
    download_url = db.StringProperty() 

class BaseRequestHandler(webapp.RequestHandler): 
    def render_template(self, filename, template_args=None): 
    if not template_args: 
     template_args = {} 
    path = os.path.join(os.path.dirname(__file__), 'templates', filename) 
    self.response.out.write(template.render(path, template_args)) 

class upload(BaseRequestHandler): 
    def get(self): 
     files=Download_file.all() 
     self.render_template('index.html',{'files':files}) 
    def post(self): 
     files = self.request.POST.multi.__dict__['_items'] 
     #self.response.out.write(files) 
     for file in files: 
      file=file[1] 
      obj = Download_file(data=file.value, mimetype=file.type) 
      obj.put() 
      file_url = "http://%s/download/%d/%s" % (self.request.host, obj.key().id(), file.filename) 
      file_url = "<a href='%s'>%s</a>" % (file_url,file_url,) 
      obj.download_url=file_url 
      obj.put() 
      self.response.out.write("Your uploaded file is now available at %s </br>" % (file_url)) 

class download(BaseRequestHandler): 
    def get(self,id,filename): 
     #id=self.request.get('id') 
     entity = Download_file.get_by_id(int(id)) 
     self.response.headers['Content-Type'] = entity.mimetype 
     self.response.out.write(entity.data) 

답변

2

당신은 아마 이것에 대한 Blob 저장소 서비스를 사용하려면; 업로드 위젯을 사용하여 blobstore에 여러 파일을 업로드하는 방법을 다루는 일련의 게시물 (1, 2, 3)을 작성했습니다.

+0

와우 닉! 방금 주말 동안 GAE를 다시 시작하고 싶습니다. ^^ –

1

AFAIK을의 request.POST['file'] 파일의 사전 있어야한다, 즉 POST['file']과 같이 키가한다 업로드 된 파일의 이름이며 값은 파일의 내용이어야합니다 (예 : POST['file']['avatar.png'] = ... # raw image data).

GAE HTTP 요청 클래스에서 제공하는 기능이 무엇인지 모르겠지만 일관성이 있어야합니다. 어떤 경우이던간에, 은 확실히입니다. self.request, somwhere!

편집 :

좋아, 난 그냥 눈치 GAE 내 추측이 작동합니다, 당신의 파일 객체를 만듭니다

for file in POST['file']: 
    obj = MyModel(data=file.value, mimetype=file.type) 
    obj.put() 
+0

안녕하세요, request.POST [ 'file']은 dict가 아니며 FieldStorage입니다. 루프가 없습니다. http://python.about.com/od/cgiformswithpython/ss/pycgitut1_3.htm – zjm1126

관련 문제