Как загрузить несколько файлов в BlobStore? - PullRequest
3 голосов
/ 21 января 2011

Я пытаюсь загрузить несколько файлов в форме в BlobStore.

Форма:

<form action="{{upload_url}}" method="POST" enctype="multipart/form-data">
  <label>Key Name</label><input type="text" name="key_name" size="50"><br/>
  <label>name</label><input type="text" name="name" size="50"><br/>
  <label>image</label><input type="file" name="image" size="50"><br/> 
  <label>thumb</label><input type="file" name="thumb" size="50"><br/> 
  <input type="submit" name="submit" value="Submit">
</form>

Затем я пытаюсь получить объекты BlobInfo для каждого из загруженных файлов:

def post(self):
    image_upload_files = self.get_uploads('image') 
    thumb_upload_files = self.get_uploads('thumb') 
    image_blob_info = image_upload_files[0]
    thumb_blob_info = thumb_upload_files[0]

Я вижу странное поведение. Оба файла попадают в BlobStore, но я не могу понять, как получить ключи, чтобы хранить их в другом объекте. Приведенный выше код позволяет получить ключ для image_blob_info, но не thumb_blob_info. Я не понимаю, как использовать get_uploads. Я хочу передать несколько файлов через форму, а затем извлечь их по имени, чтобы я мог сохранить их в соответствующих BlobReferenceProperties на другом объекте.

Ответы [ 3 ]

5 голосов
/ 21 января 2011

Каждый файл нуждается в своем уникальном URL-адресе для загрузки, поэтому я предполагаю, что происходит что-то странное, когда все три файла размещаются на одном и том же URL-адресе.

Лучшее решение для поддержки загрузки нескольких файлов описано в блоге Ника Джонсона:

http://blog.notdot.net/2010/04/Implementing-a-dropbox-service-with-the-Blobstore-API-part-3-Multiple-upload-support

1 голос
/ 21 января 2011

Вы можете опубликовать файлы с тем же именем, за которым следует [], который разместит массив:

<form action="{{upload_url}}" method="POST" enctype="multipart/form-data">
  <label>Key Name</label><input type="text" name="key_name" size="50"><br/>
  <label>name</label><input type="text" name="files[]" size="50"><br/>
  <label>image</label><input type="file" name="files[]" size="50"><br/> 
  <label>thumb</label><input type="file" name="thumb" size="50"><br/> 
  <input type="submit" name="submit" value="Submit">
</form>

Затем в вашем обработчике форм вы можете что-то вроде этого (в зависимости от вашей веб-платформы):

for uploaded_file in request.FILES.getlist('files'):
    #do something with uploaded_file
0 голосов
/ 24 августа 2011

Используя последнюю версию plupload, я смог заставить UploadQueue работать с GAE с этим битом кода.Обратите внимание, что это CoffeeScript, но он должен быть легко преобразован обратно в JavaScript, если вам действительно нужно.Предполагается, что вы получите немного json с вашего сервера в виде {url: "gae генерируется URL"}

    $("#fileUploader").pluploadQueue
        runtimes : 'html5,html4'
        use_query_string : false
        max_file_size : '3mb'
        multipart: true
        unique_names : true
        multiple_queues : true
        filters : [{title : "Image files", extensions : "jpg,gif,png"}]
        preinit:
            UploadFile: (up, file) ->
                $.ajax
                    url: '/api/upload/url'
                    async: false
                    success: (data) ->
                        up.settings.url = data.url
...