Можно ли использовать файловый API HTML 5 (например, эту библиотеку: https://github.com/23/resumable.js ) в сочетании с функцией многокомпонентной загрузки S3?
Да, но вам понадобится какой-то серверный сервер для более безопасной обработки ключей Amazon API, если вы собираетесь сделать его частью общедоступного веб-сайта.
Вы можете найти то, что выглядит как полный пример реализации этих проектов:
Обратите внимание, что я не использовал, не тестировал и не рецензировал эти проекты.
Примерное описание последовательности выглядит следующим образом:
User
loads webpage
выбирает файл для загрузки
нажимает кнопку загрузки
Webpage
sends info about file to server
Server
creates multipart upload with Amazon API
отправляет «ключ» (имя файла) и «идентификатор загрузки» обратно на веб-страницу
Webpage
works out size of parts
запрашивает сервер подписать часть, передавая «ключ», «идентификатор загрузки», информацию о части
Server
signs a part request, sends "part upload url", "date" and "auth header"
Webpage
sends part data directly to Amazon S3 via "part upload url" using "date" and "auth header"
отслеживает идентификаторы деталей
Server & Webpage
repeats 5 & 6 for each additional part, resuming if required
Webpage
makes "upload complete" request to server (passing all the part info)
Server
makes request to Amazon API to complete the creation of file
Webpage
inform user of error or success
Примечания:
Если загрузка прервана, это также должно быть обработано на стороне сервера, иначе начатые части/загрузки останутся занимать место в корзине S3.
Выполнение запроса «загрузка завершена» в Amazon может занять несколько минут.
personDean Taylorschedule15.10.2013
comment
Спасибо за подробный ответ! На самом деле я начал реализовывать протокол, который вы описали ранее, но еще не успел его закончить: github.com/keichan34/s3uploader/tree/2.0-wip - personsleepy_keita; 16.10.2013
comment
Отлично, я заметил, что вы используете Ruby в своем проекте, а также нашел еще один проект Ruby, который я добавил в ответ для справки.
- personDean Taylor; 16.10.2013
@BausTheBig это первый проект, указанный в ответе. Очевидно, это было неясно, поэтому благодаря вашему комментарию я обновил ответ, чтобы сделать ссылку более понятной.
- personDean Taylor; 20.02.2014
comment
Большое спасибо! Ответ очень подробный, именно то, что мне нужно прямо сейчас. Это еще один интересный проект (в нем используется Python), на который стоит обратить внимание: github.com/cinely/ mule-uploader#mule-upload - personroundrobin; 20.02.2014
comment
@BausTheBig на самом деле, большая часть проекта написана на Javascript, ему нужна только небольшая конечная точка на стороне сервера, которую можно легко написать на любом языке. Однако каноническая конечная точка написана на Python (Flask).
- personGabi Purcaru; 25.02.2014