Laravel Spark将个人资料图片上传到外部驱动程序

时间:2018-11-18 03:13:12

标签: laravel vuejs2 laravel-spark

我想重写Laravel Spark保存用户个人资料图片的方式,以使用外部驱动程序(例如S3)。我已经有了要使用的存储桶的S3配置。最好的方法是什么?我应该使用完全不同的路由并使用自定义终结点还是在某个地方可以更改配置以使Spark使用其他驱动程序?

1 个答案:

答案 0 :(得分:0)

所以最终这样做了

我在update-profile-photo.js中添加了这些方法

methods: {
    updateProfilePhoto() {

        axios.post('/settings/profile/details/profile-picture', this.gatherFormData())
            .then(
                () => {
                    console.log('Profile picture updated');
                    Bus.$emit('updateUser');

                    self.form.finishProcessing();
                },
                (error) => {
                    self.form.setErrors(error.response.data.errors);
                }
            );
    },
    gatherFormData() {
        const data = new FormData();

        data.append('photo', this.$refs.photo.files[0]);

        return data;
    }
}

我的控制器看起来像这样

public function updateProfilePicture(Request $request)
{
    $this->validate($request, [
        'photo' => 'required',
    ]);

    // Storing the photo
    //get filename with extension
    $filenamewithextension = $request->file('photo')->getClientOriginalName();

    //get filename without extension
    $filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);

    //get file extension
    $extension = $request->file('photo')->getClientOriginalExtension();

    //filename to store
    $filenametostore = $filename.'_'.time().'.'.$extension;

    Storage::disk('s3_users')->put($filenametostore, fopen($request->file('photo'), 'r+'), 'public');

    $url = $filenametostore;

    $request->user()->forceFill([
        'image_url' => $url
    ])->save();


    return response()->json(
        array(
            "message" => "Profile picture was updated!",
        )
    );

}