【问题标题】:uploading files from Laravel to azure blob storage将文件从 Laravel 上传到 azure blob 存储
【发布时间】:2021-03-07 22:14:39
【问题描述】:

我的任务是使用 Vue.js(惯性)维护一个 Laravel 项目(两者都不是很有经验)。现在我们需要将主机切换到 Azure,我被困在文件存储上。具体来说,我不确定如何将文件从 Laravel 上传到 Blob。我已经在使用https://github.com/matthewbdaly/laravel-azure-storage,这是一种连接驱动程序的便捷方式。

我在filesystem.php中的驱动(细节正确):

'azure' => [
            'driver'    => 'azure',
            'name'      => env('AZURE_STORAGE_NAME'),
            'key'       => env('AZURE_STORAGE_KEY'),
            'container' => env('AZURE_STORAGE_CONTAINER'),
            'url'       => env('AZURE_STORAGE_URL'),
            'prefix'    => null,
        ],

我的控制器:

$url = request()->file->store('azure');

请帮忙!

【问题讨论】:

  • 欢迎来到 SO .. 是 base64 图像吗?
  • 请尝试使用代码:store('<path>','<file_name>','azure')laravel.com/docs/8.x/filesystem#specifying-a-disk
  • 不,它不是 base64 img。我不是想将它存储在数据库中,而是存储在 Azure 中的存储资源管理器中。我尝试指定磁盘。它对我不起作用。我测试了将 blob 的 URL 作为 以及根 ( / )。这两个选项都不起作用。
  • 现在我注意到我在网络上得到一个 Status:500 说:“提供的帐户密钥 '' 不是有效的 base64 字符串。它必须通过检查 'base64_decode(, true )'。"。有什么想法吗?
  • @brpetrov 您能告诉我您是如何获得帐户密钥的吗?

标签: laravel azure azure-blob-storage inertiajs


【解决方案1】:

根据我的测试,我们应该使用双引号来扩展.evn中的访问密钥。

例如

  1. 将此添加到.env 文件中
AZURE_STORAGE_NAME=<account name>
AZURE_STORAGE_KEY="<account key>"
AZURE_STORAGE_CONTAINER=
AZURE_STORAGE_URL=https://<account name>.blob.core.windows.net/
  1. 将此添加到config/filesystems.phpdisks 部分:
'azure' => [
            'driver'    => 'azure',
            'name'      => env('AZURE_STORAGE_NAME'),
            'key'       => env('AZURE_STORAGE_KEY'),
            'container' => env('AZURE_STORAGE_CONTAINER'),
            'url'       => env('AZURE_STORAGE_URL'),
            'prefix'    => null,
        ],
  1. 上传代码
  public function fileUpload(Request $req){
        $req->validate([
        'file' => 'required|mimes:csv,txt,xlx,xls,pdf|max:2048'
        ]);

      

        if($req->file()) {
            $fileName = time().'_'.$req->file->getClientOriginalName();
            // save file to azure blob virtual directory uplaods in your container
            $filePath = $req->file('file')->storeAs('uploads/', $fileName, 'azure');

            return back()
            ->with('success','File has been uploaded.')

        }
   }

【讨论】:

  • 非常感谢!这看起来像这样做的方式!我需要推迟几天,但我会尽快告诉你。要问的一件事是:在 azure storage-> CORS -> 您应该允许允许访问它的源(域)。您是创建了一个域来测试还是在 localhost 中进行了测试?我在某处读到,除非您指定它的域,否则您的应用将无法访问它。
  • @brpetrov。我在本地主机上测试它,对我来说没问题。
  • @jimXu 显示“Driver [azure] is not supported.”,你能帮帮我吗?
  • @DevendraSharma 您必须先运行命令“composer require matthewbdaly/laravel-azure-storage”才能使用 Jim Xu 回答中的库。
【解决方案2】:

感谢@Jim Xu,从您的示例中测试了逻辑,效果很好。 如果有人偶然发现这一点,默认情况下 azure blob 容器是私有的。 要为您的 Laravel 应用公开提供文件或图像,不要忘记将容器的访问级别更改为 Blob 或 Container

【讨论】:

  • 这应该是对@Jim Xu 的回答的评论。
  • @Robson 抱歉,我的声望等级还没有达到 50,所以我无法评论其他答案
猜你喜欢
  • 2017-01-24
  • 2017-08-19
  • 2019-04-10
  • 2019-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-12
  • 2013-07-29
相关资源
最近更新 更多