Вопрос

Я пытаюсь загрузить несколько файлов в форму в 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 на другой сущности.

Это было полезно?

Решение

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

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

http://blog.notdot.net/2010/04/implementing-a-propbox-service-with-the-blobstore-api-part-3-multiple-upload-support

Другие советы

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

<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

Используя последнюю версию 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top