Laravel 文件操作:保存上传文件
假设我们上传头像文件。在 Laravel 中我们可以通过 store
方法来进行存储:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class UserAvatarController extends Controller
{
/**
* 更新用户头像.
*
* @param Request $request
* @return Response
*/
public function update(Request $request)
{
$path = $request->file('avatar')->store('avatars');
return $path;
}
}
上例有几个点需要注意。我们指定的是目录名,而不是文件名。默认情况下, store
方法会自动生成唯一的 ID 作为文件名。文件的扩展名将通过检查文件的 MIME 类型来确定。该文件的路径和文件名会被 store
方法返回,以便后续数据库的存储使用。
你也可以使用 Storage
facade 上的 putFile
方法达到和上例同样的效果:
$path = Storage::putFile('avatars', $request->file('avatar'));
指定文件名
新文件名
如果你不想将文件名自动分配给存储的文件,可以使用 storeAs
方法,该方法接受路径,文件名和 (可选) 磁盘作为其参数:
$path = $request->file('avatar')->storeAs(
'avatars', $request->user()->id
);
你可以使用 Storage
facade 上的 putFileAs
方法达到和上例同样的文件操作:
$path = Storage::putFileAs(
'avatars', $request->file('avatar'), $request->user()->id
);
原始文件名
$path = $request->file('avatar')->storeAs(
'avatars', $request->file('avatar')->getClientOriginalName()
);
指定磁盘
默认情况下, store
方法使用默认磁盘。如果你需要指定其他的磁盘,可以传入磁盘名作为 store
方法的第二个参数:
$path = $request->file('avatar')->store(
'avatars/'.$request->user()->id, 's3'
);
指定文件名
$path = $request->file('avatar')->storeAs(
'avatars/'.$request->user()->id, $filename, 's3'
);
推荐文章: