2013-07-17 122 views
1

我正在尋找寫一個服務器上的函數來接受從任何其他服務器上傳的文件,換句話說就是類似於api。使用CURL接受文件上傳php

假設在www.upload.com上有一個上傳腳本來上傳文件。而不是在該服務器上進行發佈和保存,我希望他們在fileserver.com上捲曲我的腳本以保存文件。

我上fileserver.com功能來保存文件看起來像這樣

function upload($data) { 

    $uploaddir = '/data/'; 
    $uploadfile = $uploaddir . 'filename.jpg'; 

    if(move_uploaded_file($data['upload_file'], $uploadfile)) { 
     return 'saved successfully'; 
    } else { 
     return 'bad file'; 
    } 

    } 

和upload.com服務器上我測試的例子與此:

if($_POST) { 

$ch=curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://fileserver.com/upload.php'); 
curl_setopt($ch, CURLOPT_POST, TRUE); 
curl_setopt($ch, CURLOPT_POSTFIELDS, '[email protected]'.$data['img_file']['tmp_name']); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$result = curl_exec($ch); 
curl_close($ch); 
} 

請記住這是作爲一個API的目的,所以執行curl的功能是嚴格測試的。上傳功能是api功能。有誰知道如何做到這一點,或者我做錯了什麼,甚至有可能。

回答

0

嗯,其實我已經編寫的東西是:https://github.com/chris-l/urImgAPI

我的需求是這樣的: 我做了一個網站,託管的虛擬機上,在那裏我有這樣的允許上傳圖像的形式,但我不想通過提供圖像來浪費虛擬機的帶寬,因此我得到了一個廉價的共享主機服務(只有php),並在那裏安裝了PHP開發的RESTful API,這使我能夠使用此API從任何地方保存圖像。

該API具有安全功能,可防止隨機人員通過要求籤名將文件保存在我的文件服務器上。簽名的工作原理如下:

$signature = md5(md5sum(your_image_file) . "your secret key"); 

而且您必須將請求的簽名作爲參數傳遞。這樣,您永遠不會傳輸密鑰,並有助於防止其他人將圖像存儲在文件服務器上。

雖然我創建了用於上傳圖片的API,但它可以輕鬆更改爲託管任何類型的文件。 (也許我會改變它在未來)

是根據AGPL3許可證發佈,所以檢查它,我希望它可能對你有用。