1

我希望在一台服务器上编写一个函数来接受从任何其他服务器上传的文件,换句话说,类似于 api。

假设在 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, 'upload_file=@'.$data['img_file']['tmp_name']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
}

请记住,这是作为 API 使用的,因此执行 curl 的功能仅用于测试。上传函数是api函数。有谁知道该怎么做或我做错了什么,这甚至可能吗?

4

1 回答 1

0

好吧,实际上我为此编写了一些代码:https ://github.com/chris-l/urImgAPI

我的需求是这样的:我有一个站点,托管在虚拟机上,并且我有一个允许上传图像的表单,但我不想通过提供图像来浪费虚拟机的带宽,所以我得到了一个廉价的图像共享托管服务(只有 php),并在安装在那里的 php 上开发了一个 RESTful API,它允许我使用这个 API 从任何地方保存图像。

该 API 具有安全功能,可防止随机人通过要求签名将内容保存在我的文件服务器上。签名的工作方式如下:

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

并且您必须在请求中将签名作为参数传递。这样,您就永远不会传输密钥,并有助于防止其他人将图像存储在您的文件服务器上。

虽然我创建了用于上传图像的 API,但它可以轻松更改为托管任何类型的文件。(也许我将来会改变它)

是在 AGPL3 许可下发布的,所以检查一下,我希望它对你有用。

于 2013-08-13T19:57:17.313 回答