2013-07-25 25 views
1

我們正在創建一個允許用戶上傳大文件的表單。在移動設備和慢速連接上,可能需要一段時間才能上傳,因此,通過AJAX調用來處理這一點似乎很重要,該調用會向用戶顯示進度條(或讓他們知道它仍在工作的內容)。帶有祕密查詢變量的AJAX文件上傳

下面是問題:上傳的端點是第三方API,它需要我們的祕密API密鑰作爲參數之一。這是直接鏈接到the section in their documentation的鏈接。這個API密鑰不能被暴露給客戶端的用戶。

我的第一本能是將表單提交給我們網站上的中間PHP腳本,它具有API密鑰,然後將文件上傳到API。但我很確定這意味着將文件上傳兩次:一次到我們的服務器。然後再從我們的服務器到API端點。即使表單是使用AJAX提交的,對於用戶來說完成等待的時間長兩倍也不是一個好的結果。

因此:什麼是讓用戶上傳文件同時保持我們的API密鑰安全的最平滑的方式?

一些細節可能並不重要:
我們的網站是基於CakePHP框架(v2.x)構建的PHP web應用程序。上傳的文件是1到5分鐘長的所有不同格式的視頻文件。該API是一家名爲Wistia的公司(請參閱上述文檔的鏈接)。文件大小似乎從3-30MB。我們無法改變第三方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