You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中Storage的putFile/putFileAs方法是否会临时存文件再传S3?

Laravel Storage putFile/putFileAs 上传S3是否会先存服务器?

核心答案

  • 使用putFile或putFileAs处理前端上传的文件时,会先把文件保存到Laravel服务器的本地临时目录,再上传至S3,无法实现直接流式上传。
  • 你提到的Storage::disk('s3')->putFileAs($dir, $file, $filename)同样会先让文件落地服务器,满足不了“不存本地”的需求。

原因说明

当传入的$file是Illuminate\Http\UploadedFile实例(前端上传的文件基本都是这个类型)时,putFile/putFileAs内部会调用UploadedFile的存储逻辑——先把文件移动到本地临时位置,再发起S3上传请求。这种处理逻辑会让大文件占用服务器磁盘空间,完全不符合流式上传的需求。

实现直接流式上传到S3的方法

放弃使用putFile/putFileAs,改用Storage::put配合文件流上传,直接将请求中的文件流传输到S3,不会在服务器生成完整的临时文件:

示例代码1:

$uploadedFile = $request->file('large_file');
// 获取文件流
$stream = fopen($uploadedFile->getRealPath(), 'r');

// 直接将流上传至S3
Storage::disk('s3')->put('uploads/large_file.ext', $stream);

// 关闭流
fclose($stream);

示例代码2(更简洁):

$stream = $request->file('large_file')->getStream();
Storage::disk('s3')->put('uploads/large_file.ext', $stream);

这种方式下,文件内容会直接从前端请求流传输到S3,仅会在内存中处理部分流数据,不会占用服务器磁盘空间,适合大文件上传场景。

内容的提问来源于stack exchange,提问作者bestfirstsearch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 17:42:33