laravel 使用ftp下载文件到网页
时间: 2024-09-18 14:01:53 浏览: 33
Laravel开发-assets
在 Laravel 中,你可以使用 FTP 函数库来下载文件并将其保存到服务器上供网页访问。首先,你需要安装一个 PHP 的 FTP 扩展或者使用第三方库,比如 `league/flysystem-ftp` 或者 `phpseclib/phpseclib`。以下是基本步骤:
1. **安装依赖**:
- 如果你选择使用 `league/flysystem-adapter-ftp`,可以在 Composer 控制台运行:
```
composer require league/flysystem-adapter-ftp
```
- 如果使用 `phpseclib/phpseclib`,则直接通过 Composer 安装:
```
composer require phpseclib/phpseclib
```
2. **配置 FTP 连接**:
将 FTP 信息添加到 `.env` 文件或者创建一个新的配置文件(如 `config/filesystems.php`),例如:
```php
'local_ftp' => [
'driver' => 'ftp',
'host' => env('FTP_HOST', 'your_host'),
'username' => env('FTP_USERNAME', 'your_username'),
'password' => env('FTP_PASSWORD', 'your_password'),
// 可选,如果你的 FTP 需要 SSH 密钥认证
'keyPath' => storage_path('.ssh/id_rsa.pub'),
'passphrase' => env('FTP_PASSPHRASE', ''),
],
```
3. **创建下载功能**:
使用 Laravel 的 Flysystem 或者 `phpseclib` 创建一个函数来下载文件:
```php
use League\Flysystem\Filesystem;
use phpseclib\Crypt\RSA;
function downloadFileFromFTP($filePath, $destinationPath)
{
// 使用 Flysystem
$filesystem = new Filesystem([
'driver' => env('FILESYSTEM_LOCAL_FTP_DRIVER'),
// 加入你的配置
]);
$file = $filesystem->get($filePath);
file_put_contents($destinationPath, $file);
// 或者使用 phpseclib (示例仅适用于SSH密钥认证)
// $rsa = RSA::loadKey(file_get_contents(config('filesystems.local_ftp.keyPath')));
// $ftp = new FtpClient();
// $ftp->login(env('FTP_USERNAME'), $rsa->encrypt(env('FTP_PASSWORD')));
// $ftp->get($filePath, $destinationPath);
// $ftp->close();
}
```
4. **在控制器或路由中调用**:
在需要下载的地方,如控制器动作或路由处理程序,调用该函数,并将 FTP 文件路径和目标网页路径作为参数传递。
```php
public function downloadAction()
{
$downloadFilePath = 'path/to/remote/file.txt';
$destinationPath = public_path('/uploads/downloaded_file.txt');
downloadFileFromFTP($downloadFilePath, $destinationPath);
// 然后你可以返回下载链接给用户
return response()->download($destinationPath);
}
```
阅读全文