devfelipereis/uploadtrait

一个简单的Laravel上传特性

dev-master 2019-01-16 13:31 UTC

This package is not auto-updated.

Last update: 2024-09-20 03:20:32 UTC


README

一个简单的Laravel上传特性。在开发环境中,它将上传到本地存储,在生产/预发布环境中则上传到S3存储桶。

对于生产环境,您需要按照Laravel文档设置S3作为您的默认云存储。

已测试与Laravel 5.4及以上版本兼容。但应与Laravel 5.x兼容。

注意:这是为我自己的设置制作的,效果良好。我喜欢开发时使用本地存储,生产时使用S3。请随意修改以满足您的需求 ;)

When not using s3, the generated url will be something like this: site.com/storage?path=something/something.jpg
Do not use this in production, it's only for dev.
It is vulnerable with Full Path Disclosure (https://www.owasp.org/index.php/Full_Path_Disclosure)

如何安装

composer require devfelipereis/uploadtrait:dev-master

如果您正在运行Laravel 5.4或以下版本,您需要将服务提供者添加到app.php配置文件中的providers数组,如下所示

DevFelipeReis\UploadTrait\UploadTraitServiceProvider::class

现在请看下面的示例,了解如何使用它。

示例

在您的模型中,设置上传的基础路径

...
use DevFelipeReis\UploadTrait\UploadTrait;

class Company extends Model
{
    use UploadTrait;

    ...

    public function getBaseUploadFolderPath() {
        return 'companies/' . $this->id . '/';
    }
}

现在在您的控制器中...

public function store(CreateCompanyRequest $request)
{
    ...
    $inputs = $request->except('logo');
    $company = $this->companyRepository->create($inputs);

    // Company logo
    $company_logo = $request->file('logo');
    if ($company_logo) {
        $company->logo = $company->uploadFile($company_logo);
        // $company->logo will be something like: companies/1/8e5dc57cb5d80532f52e13597c5f0b68.jpg
    }

    $company->save();

    ...
}

如何访问图片?

最后,在视图中

...
<img id="logo-img" class="thumbnail preview-img" src="{{ $company->getUploadUrlFor('logo') }}"/>
...

如何删除图片?

也许您想要删除那张图片,可以尝试这样做

$company->deleteUploadFor('photo');