【问题标题】:Uploading files to remote file server (PHP)将文件上传到远程文件服务器 (PHP)
【发布时间】:2019-12-11 11:09:53
【问题描述】:

这里似乎有类似的问题,但我没有完全找到我的情况,所以我想我会试着问一下。

目前我有一个小文件上传网站(文件最大2GB),里面有这个流程;

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

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

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

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

任何建议都会很棒,因为我目前正在努力寻找一种方法来做到这一点。有关信息,我目前正在使用simpleUpload.js 上传文件

谢谢!

【问题讨论】:

  • 你已经尝试过哪些代码?
  • 到目前为止尝试了很多。我只是想离开S3。我已经尝试过 cURL,但我想要一种将临时文件直接上传到服务器的方法(在本地保存之前) - 但我似乎无法让它工作。

标签: javascript php server upload


【解决方案1】:

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

// 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';
}

希望这对某人有所帮助。

【讨论】:

    猜你喜欢
    • 2019-01-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 2015-12-15
    相关资源
    最近更新 更多