2013-07-25 3 views
1

Мы создаем форму, которая позволяет пользователям загружать большие файлы. На мобильных устройствах и медленных соединениях может потребоваться некоторое время для загрузки, поэтому для этого важно, чтобы это было обработано вызовом AJAX, который показывает пользователям индикатор выполнения (или что-то, чтобы сообщить им, что он все еще работает).Загрузка файла AJAX с секретными запросами vars

Вот проблема: конечная точка для загрузки - сторонний API, который ожидает, что наш секретный ключ API станет одним из параметров. Вот ссылка непосредственно на the section in their documentation. Этот ключ API не может быть выставлен пользователям на стороне клиента.

Мой первый инстинкт заключается в том, чтобы отправить форму на промежуточный PHP-скрипт на нашем сайте, который имеет ключ API, а затем загружает файл в API. Но я уверен, что это будет означать загрузку файла дважды: один раз на наш сервер. Затем снова с нашего сервера на конечную точку API. Даже если форма отправлена ​​с помощью AJAX, это не является отличным результатом для пользователя, который будет ждать в два раза больше времени для его завершения.

So: Какой самый простой способ позволить пользователям загружать файлы, сохраняя при этом наш ключ API безопасным?

Некоторые детали, которые могут или не могут быть важны:
Наш сайт является PHP веб-приложение построен на фреймворке CakePHP (v2.x). Загружаемые файлы - это видеофайлы всех разных форматов от 1 до 5 минут. API - это компания под названием Wistia (см. Ссылку на документы выше). Размер файлов составляет от 3 до 30 МБ. У нас нет возможности изменить способ работы стороннего API.

+0

Как вы должны передать параметр API? По PHP? По Javascript в качестве параметра в URL-адресе? Я не очень понимаю, почему это должно быть общедоступным, а не скрытым на стороне PHP. – Alvaro

+0

Ajax-запрос будет отправлен непосредственно третьей стороне? – Pieter

+0

@Alvaro Я добавил ссылку на параметры авторизации в своих документах. – emersonthis

ответ

0

Загрузка дважды не должна быть проблемой - не так ли?

С вашего сервера на свой API - это то, что серверы и API предназначены для обмена данными.

Javascript не предназначен для этого.

+0

Загрузка в два раза прекрасна, но заставляя загрузчика ждать в два раза больше, чтобы загрузить большой файл на медленном подключении, это облом. Я не могу хранить файлы и ставить их в очередь для загрузки в API, потому что API выполняет определенную проверку, которая должна быть передана пользователю в момент загрузки. – emersonthis

+0

Сделайте вторую загрузку с сервера на API фоновой задачей. Не нужно, чтобы пользователь знал об этом. –

+0

Это именно то, что мне интересно узнать. Я никогда этого не делал раньше. Не могли бы вы немного объяснить, как это может сработать? – emersonthis

0

Невозможно скрыть его на клиенте, поэтому ваш первый инстинкт был прав - вам нужно будет перенаправить файл с сервера.

0

Должна быть доступна возможность чтения исходного потока сообщений из ввода php: //, вы можете получить загруженный файл оттуда (если вы можете его разобрать :)) и сразу начать загрузку на сервер api.

Но даже если связь между мобильным устройством и вашим скриптом медленная, ваш скрипт, скорее всего, скорее всего загрузит сервер api. Так это действительно необходимо?

+0

Мне очень интересно узнать больше о чтении исходного потока сообщений. Я никогда не делал этого раньше. Можете ли вы привести пример этого? Или ссылка на что-то? – emersonthis

+0

Теперь я узнал, что это не работает для multipart/form-data. – Marek

Смежные вопросы