Как загрузить несколько файлов в Blobstore?
-
16-10-2019 - |
Вопрос
Я пытаюсь загрузить несколько файлов в форму в 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.
Лучшее решение для поддержки загрузки нескольких файлов описано в блоге Ника Джонсона:
Другие советы
Вы можете опубликовать файлы с тем же именем, а затем []
, который опубликует массив:
<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