【问题标题】:Is move_uploaded_file necessary for local storage prior to cloud storage?在云存储之前本地存储是否需要 move_uploaded_file?
【发布时间】: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']); without move_uploaded_file 可以正常工作(只要它在与文件上传相同的请求中完成,因为在 PHP 请求终止时删除了 tmp 文件)。
  • @drew010,如果你看一下上面的临时路径示例,它是一个没有文件类型的哈希,当我尝试直接访问它时,它没有找到。
  • 临时文件只会在 PHP 请求的生命周期中存在。这可能就是您无法直接访问它的原因。

标签: php file-upload


【解决方案1】:

如果您正在考虑性能问题,那么您不应该关心move_uploaded_file,因为它只是进行一些检查并重命名它的名称(路径)。 CPU消耗最小。除非临时文件的目的地是外置硬盘,需要网络传输。

如果您想让服务器进程更轻松,那么您可以考虑使用 AWS SDK Javascript for browser 并将文件直接从客户端浏览器上传到您的 S3 存储桶(查看此链接了解如何操作:https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/s3-example-photo-album.html#s3-example-photo-album-adding-photos)。使用这种方式,您应该考虑发出 HTTP 请求,只是为了在文件上传之后/之前将文件信息保存在数据库中。

如果您对使用 AWS SDK Javascript for browser 不感兴趣,那么您可以尝试: $this->saveToCloud($this->s3Path,$_FILES['file']['tmp_name']); 但我不确定它是否有效,我没有尝试过。

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2020-12-31
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    相关资源
    最近更新 更多