【问题标题】:LARAVEL How to transfer file from local (public) to FTP using LaravelLARAVEL 如何使用 Laravel 将文件从本地(公共)传输到 FTP
【发布时间】:2019-03-05 18:00:18
【问题描述】:

我想问一个问题,有人知道如何将数据从本地/公共传输到 ftp,我正在使用 Storage 类 https://laravel.com/docs/5.4/filesystem

这是我的代码

$file_local = Storage::disk('local')->get('public/uploads/ftp/file.pdf');
$file_ftp = Storage::disk('ftp')->put('/file.pdf', $file_local');

但是我的代码不起作用,当我在 ftp 上打开文件时,文件损坏了,然后我用记事本打开它,里面的文件,内容是 'public/uploads/ftp/file.pdf' 我的内容意思是内容应该在本地而不是我写的,

任何人都知道如何将文件从本地传输到 ftp,抱歉我的英语不好,谢谢您的回答

【问题讨论】:

    标签: laravel


    【解决方案1】:

    要开始使用,您应该知道 FTP 主机、FTP 用户名和 FTP 密码的详细信息。一次,您已准备好详细信息,打开 .env 文件并添加如下详细信息:

        FTP_HOST=YOUR_FTP_HOST_VALUE
        FTP_USERNAME=YOUR_FTP_USERNAME_VALUE
        FTP_PASSWORD=YOUR_FTP_PASSWORD_VALUE
    

    确保将占位符替换为实际值。接下来,打开 config/filesystems.php 文件并将“ftp”配置添加到“disks”数组中。

    <?php
    return [
        ......
        'disks' => [
            ......
            'ftp' => [
                'driver' => 'ftp',
                'host' => env('FTP_HOST'),
                'username' => env('FTP_USERNAME'),
                'password' => env('FTP_PASSWORD'),
                'root' => 'DIR_PATH_TO_WHERE_IMAGE_STORE' // for example: /var/www/html/dev/images
            ],
        ],
    
    ];
    

    将 DIR_PATH_TO_WHERE_IMAGE_STORE 替换为您需要存储图像的实际路径。例如,如果我们有一个名为“images”的文件夹,并且该文件夹的路径是 /var/www/html/dev/images,那么这个路径将作为上述数组中“root”的值。

    为了通过 FTP 上传文件,我们需要一个用户可以提交图像的表单。在您的视图文件中添加以下代码。

    <form action="{{ url('PASS_ACTION_URL_HERE') }}" method="post" enctype="multipart/form-data">
        <div class="form-group">
            <label for="exampleInputFile">File input</label>
            <input type="file" name="profile_image" id="exampleInputFile" multiple />
        </div>
        {{ csrf_field() }}
        <button type="submit" class="btn btn-default">Submit</button>
    </form>
    

    您应该将 PASS_ACTION_URL_HERE 替换为您的实际路线。由于我们使用 Laravel Storage 进行文件上传,用户需要将 Facade 添加到控制器文件中,如下所示:

    public function store(Request $request)
    {
        if($request->hasFile('profile_image')) {
    
            //get filename with extension
            $filenamewithextension = $request->file('profile_image')->getClientOriginalName();
    
            //get filename without extension
            $filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
    
            //get file extension
            $extension = $request->file('profile_image')->getClientOriginalExtension();
    
            //filename to store
            $filenametostore = $filename.'_'.uniqid().'.'.$extension;
    
            //Upload File to external server
            Storage::disk('ftp')->put($filenametostore, fopen($request->file('profile_image'), 'r+'));
    
            //Store $filenametostore in the database
        }
    
        return redirect('images')->with('status', "Image uploaded successfully.");
    }
    

    ‘profile_image’是我们文件输入的名称。我们构建文件的唯一名称,然后将其上传到外部服务器。注意我们使用了 Storage::disk(‘ftp’) 方法。此函数会将我们的文件存储到配置中定义的路径。用户应将值“$filenametostore”存储在您的数据库中。

    【讨论】:

      【解决方案2】:
      'local' => [
          'driver' => 'local',
          'root'   => storage_path().'/app',
      ],
      

      如果您使用本地磁盘 (config/filesystems.php),除非您更改了默认设置,否则您将在“storage/app”而不是公共文件夹中查找。所以:

      $file_local = Storage::disk('local')->get('file.pdf');
      

      将查找“Storage/App/file.pdf”

      确保您的 pdf 在该文件夹中并试一试:

      $file_local = Storage::disk('local')->get('file.pdf');
      $file_ftp = Storage::disk('ftp')->put('file.pdf', $file_local);
      

      编辑:另外,我注意到在您的原始帖子第二行代码中,您在 $file_local 之后有流氓 ' ;)

      【讨论】:

        猜你喜欢
        • 2017-10-11
        • 2016-03-28
        • 1970-01-01
        • 2018-06-08
        • 2019-01-27
        • 2018-05-03
        • 1970-01-01
        • 1970-01-01
        • 2013-03-28
        相关资源
        最近更新 更多