要开始使用,您应该知道 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”存储在您的数据库中。