【问题标题】:Where to save files in Laravel 5 folder structure?Laravel 5文件夹结构中的文件保存在哪里?
【发布时间】:2015-11-07 10:01:09
【问题描述】:

我的 Laravel 项目会在进行一些计算后保存文件(txt 或 csv)。

我正在寻找保存这些文件的最佳做法。 也许 /resources/csv/...?

第二个问题是从类中引用此路径的最佳方式是什么? 在 .env 文件中设置 abs 路径? 有没有返回资源路径的laravel方法?

【问题讨论】:

    标签: php file laravel laravel-5


    【解决方案1】:
    public function storePhotos($data, Request $request, $requirement)
    {
        //setlocale(LC_ALL, 'en_US.UTF-8'); //for spanish names
        $fileUploaded = $request->file('someVarFormName');
        $folder = 'docs/';
    
        $destinationFolder = date("Y-m");
        $destinationFolderInServer = $folder.$destinationFolder;//.'/';
        //$rules = array('file' => 'required|mimes:png,gif,jpeg,txt,pdf,doc,docx,exel,exelx'); //'required|mimes:png,gif,jpeg,txt,pdf,doc'
        $validator = Validator::make(array('file' => $fileUploaded), $rules);
    
        if($validator->passes())
        {
            $originalFileName = $fileUploaded->getClientOriginalName();
            $fileName = pathinfo($originalFileName, PATHINFO_FILENAME);
            $fileExtension = strtolower(pathinfo($originalFileName, PATHINFO_EXTENSION));
    
            $linkFilenameTemp = strtolower(ToolText::createLink($fileName));
    
            $linkFilename = $linkFilenameTemp.'.'.$fileExtension;
    
            //get versioin number if filename exist
            $i = 1;
            while(file_exists($destinationFolderInServer.'/'.$linkFilename))
            {
                $linkFilename = $linkFilenameTemp.'('.$i.').'.$fileExtension;
                $i++;
            }
    
    
            //* quitar / si falla
            $upload_success = $fileUploaded->move($destinationFolderInServer, $linkFilename);
            $dbRegOfFile = NULL;
    
            if($requirement->have_file)
                $dbRegOfFile = new mdl_TramitesRequisitosFiles();
            else
                $dbRegOfFile = mdl_TramitesRequisitosFiles::where('requisito_id', $requirement->id)
                ->get();
    
            $dbRegOfFile->requisito_id = $data['requirementId'];
            $dbRegOfFile->publisher = $data['publisher'];
            $dbRegOfFile->publisher_entity = $data['publisher_entity'];
            $dbRegOfFile->nice_name = $fileName;
            $dbRegOfFile->link_file_name = $linkFilename;
            $dbRegOfFile->extension = $fileName;
            $dbRegOfFile->size = $fileUploaded->getClientSize();
            $dbRegOfFile->save();
    
        }
    

    【讨论】:

      【解决方案2】:

      /resources 不是最好的位置,因为该文件夹用于存放源文件并且通常存储在源代码存储库(例如 git)中。

      应用程序生成的文件通常在 /storage 文件夹中的某个位置结束 - 只需在那里创建一个 /storage/csv 文件夹。

      您不应该直接从您的类中引用这些文件。 Laravel 的文件系统正是你所需要的——你可以在这里阅读更多关于它们的信息:http://laravel.com/docs/master/filesystem。它们使对文件的操作(如读取、写入、前置、追加、删除、移动、获取所有文件等等...)变得更加简单。

      首先在你的 config/filesystems.php

      中定义一个文件系统
      'disks' => [
        'csv' => [
          'driver' => 'local',
          'root'   => storage_path().'/csv',
        ],
      ],
      

      现在您可以通过 Storage 外观从代码中的任何位置读取/写入 csv 文件,如下所示:

      Storage::disk('csv')->put('file.csv', $content);
      $content = Storage::disk('csv')->get('file.csv');
      

      【讨论】:

      • 我目前的需要是创建文件,然后在同一次执行中使用它。没有“永久”文件参考。无论如何,您提供的解决方案很棒。谢谢
      • 如果我在 csv 文件夹中有多个子目录。您建议如何直接访问它们?更好地在 config/filesystems.php 中定义更具体的条目?或像 Storage::disk('csv')."/mysubdir/../" 一样链接起来(还不知道如何正确写这个..)
      • 在传递给 put/get 的文件名中包含文件夹,例如->put('folder/file.csv', $content).
      【解决方案3】:

      您可以将文件保存在存储文件夹中。

      例如:

      可以在storage文件夹中创建一个名为csv的文件夹,获取路径如下:

      storage_path().'/csv';
      

      您可以在

      中找到存储文件夹

      Laravel 4.2:应用>存储
      Laravel 5+:在根目录中

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-29
      • 2012-08-30
      • 2017-11-12
      • 2014-02-18
      • 2010-11-28
      • 2017-01-04
      • 2011-08-22
      • 1970-01-01
      相关资源
      最近更新 更多