Laravel 文件操作:保存上传文件 2 个改进

假设我们上传头像文件。在 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'
);
本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!