【发布时间】:2018-12-19 07:01:24
【问题描述】:
我正在开发一个允许用户将图片上传到系统的应用程序,我们将这张图片存储在云存储 (S3) 中。目前,一旦上传图片,我们正在处理他们的文件,通过move_uploaded_file() 在本地复制临时文件,然后使用该本地文件将其上传到 S3。这个本地副本是必需的,还是可以覆盖此步骤并直接上传到云存储而无需存储本地副本?
$temp = $_FILES['file']['tmp_name'];
$target = ABSPATH.'uploads/';
$name = $_FILES["file"]["name"];
$targetFile = $target . $name;
move_uploaded_file($temp,$targetFile);
//upload local file to s3
$this->saveToCloud($this->s3Path,$targetFile);
在文件通过move_uploaded_file 复制到本地存储之前,它存在于 tmp php 存储中:
/Applications/MAMP/tmp/php/phpx3uBiT
我想做的只是:
$this->saveToCloud($this->s3Path,$_FILES["file"]["tmp_name"]);
提前致谢!
【问题讨论】:
-
只要网络服务器用户可以访问云存储并且路径和协议与
move_uploaded_file()兼容,那么只需将其移动到云端。 -
我们使用 AWS S3 开发工具包通过
MultipartUploader()将文件上传到云端,包装函数接受路径和文件名。这是本地副本派上用场的地方,这就是我遇到的困难。 -
$this->saveToCloud($this->s3Path,$_FILES['file']['tmp_name']);withoutmove_uploaded_file可以正常工作(只要它在与文件上传相同的请求中完成,因为在 PHP 请求终止时删除了 tmp 文件)。 -
@drew010,如果你看一下上面的临时路径示例,它是一个没有文件类型的哈希,当我尝试直接访问它时,它没有找到。
-
临时文件只会在 PHP 请求的生命周期中存在。这可能就是您无法直接访问它的原因。
标签: php file-upload