将文件上传到远程文件服务器(PHP)

时间:2019-12-11 11:09:53

标签: javascript php server upload

这里似乎有类似的问题,但是我没有完全找到我的处境,所以我想尝试一下。

当前我有一个小型文件上传网站(文件大小最大为2GB),并且具有该流程;

  1. 人员访问并上传文件
  2. 生成文件名
  3. 使用多块上传直接将文件上传到S3
  4. 文件数据被放入SQL数据库(链接到文件,名称,大小等)
  5. 返回指向要下载文件的链接

我想使用自己的远程存储服务器替换第3步,只是想知道通过PHP上传到远程服务器的最快方法。到目前为止,我唯一能看到的选择是使用cURL传输在本地上传后的文件,或者直接将文件上传到存储服务器。

首先,将存储库上载到存储服务器似乎是一个不错的选择,但是随后更新主服务器上的数据库似乎很困难,因为所有处理都将在远程服务器上进行(除非有更简单的方法?)。

通过cURL上载似乎很慢,因为它最初是上载到本地服务器然后移动的。

任何建议都将是一个很好的选择,因为我正在努力寻找一种方法来解决此问题。有关信息,我目前使用simpleUpload.js上传文件

谢谢!

1 个答案:

答案 0 :(得分:0)

最终通过实验发现了这一点。在服务器端,它需要以下代码来发送文件;

// Grab the data to send
$data = array(
    'file' => new CurlFile($_FILES["file"]["tmp_name"], $_FILES["file"]["type"],   $_FILES["file"]["name"]),
    'upload_folder' => 'foldername'
);

// Prepare the cURL call to upload the external script
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://external.com/upload.php");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$res = curl_exec($ch);
curl_close($ch);

在要发送到的外部服务器上,您将需要以下内容来获取它;

// Holder array
$output = array();

// Store the folder that is sent
$folderName = $_POST['upload_folder'] . '/';

// Attempt to create it
if(mkdir($folderName)) {
    // Move the file into the folder
    if(move_uploaded_file($_FILES["file"]["tmp_name"], $folderName . $_FILES['file']['name'])) {
        $output['success'] = true;
        $output['message'] = 'upload_success';
    }else{
        // Upload failed
        $output['success'] = false;
        $output['message'] = 'upload_fail';
    }
}else{
    // Could not create dir
    $output['success'] = false;
    $output['message'] = 'dir_create_fail';
}

希望这可以帮助某人。

相关问题