使用thinkphp6 下载oss阿里云图片到浏览器执行自动下载 并且修改文件名
时间: 2024-03-12 14:49:02 浏览: 60
可以通过以下步骤实现:
1. 首先,你需要在 `config/filesystem.php` 文件中添加配置信息,以便连接到阿里云 OSS。
```
'disks' => [
// ...
'oss' => [
'driver' => 'oss',
'access_id' => env('OSS_ACCESS_ID'),
'access_key' => env('OSS_ACCESS_KEY'),
'bucket' => env('OSS_BUCKET'),
'endpoint' => env('OSS_ENDPOINT'),
'isCName' => env('OSS_IS_CNAME', false),
'debug' => env('OSS_DEBUG', false),
],
],
```
2. 然后,在你的控制器中,使用以下代码从 OSS 下载图片并执行自动下载:
```php
use Illuminate\Support\Facades\Storage;
public function downloadImage()
{
$filename = 'your_image_file_name.jpg'; // 替换成你的图片文件名
$path = 'your/oss/directory/' . $filename; // 替换成你的 OSS 目录和文件名
$headers = [
'Content-Type' => 'image/jpeg',
'Content-Disposition' => 'attachment; filename="' . $filename . '"',
];
return response(
Storage::disk('oss')->get($path),
200,
$headers
);
}
```
3. 如果你需要修改文件名,可以在下载之前先将图片下载到本地,修改文件名后再返回给浏览器。示例代码如下:
```php
use Illuminate\Support\Facades\Storage;
public function downloadImage()
{
$filename = 'your_image_file_name.jpg'; // 替换成你的图片文件名
$path = 'your/oss/directory/' . $filename; // 替换成你的 OSS 目录和文件名
$tempFilename = 'temp_' . $filename; // 临时文件名
$tempPath = storage_path('app/public/temp/' . $tempFilename); // 临时文件路径
// 从 OSS 下载图片到本地
Storage::disk('oss')->download($path, $tempPath);
// 修改文件名
$newFilename = 'new_image_file_name.jpg'; // 替换成你的新文件名
$newPath = storage_path('app/public/temp/' . $newFilename); // 替换成你的新文件路径
rename($tempPath, $newPath);
// 返回给浏览器
$headers = [
'Content-Type' => 'image/jpeg',
'Content-Disposition' => 'attachment; filename="' . $newFilename . '"',
];
return response(
file_get_contents($newPath),
200,
$headers
);
}
```
注意,上面的示例代码中使用了本地磁盘驱动器 `public`,你需要在 `config/filesystem.php` 文件中配置该磁盘驱动器:
```
'disks' => [
// ...
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL') . '/storage',
'visibility' => 'public',
],
],
```
另外,你需要在 `storage/app/public` 目录下创建一个 `temp` 目录,用于存放临时文件。
阅读全文