使用thinkphp6 根据url下载oss图片到浏览器中 并且修改文件名称
时间: 2024-04-04 19:35:50 浏览: 111
可以通过以下步骤实现:
1. 首先,在你的 `config` 文件夹下的 `filesystem.php` 文件中配置好你的 OSS 驱动,例如:
```php
return [
'default' => '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('APP_DEBUG', false),
],
],
];
```
2. 在你的控制器中编写下载方法,例如:
```php
use OSS\OssClient;
use OSS\Core\OssException;
class DownloadController extends Controller
{
public function download($url)
{
// 获取文件名
$filename = pathinfo($url, PATHINFO_BASENAME);
try {
// 获取 OSS 客户端实例
$ossClient = new OssClient(
config('filesystems.disks.oss.access_id'),
config('filesystems.disks.oss.access_key'),
config('filesystems.disks.oss.endpoint')
);
// 下载文件到本地临时目录
$localFile = tempnam(sys_get_temp_dir(), 'oss');
$ossClient->getObject(config('filesystems.disks.oss.bucket'), $url, [
OssClient::OSS_FILE_DOWNLOAD => $localFile,
]);
// 修改文件名
$newFilename = 'new_' . $filename;
// 设置响应头
$headers = [
'Content-Type' => mime_content_type($localFile),
'Content-Disposition' => 'attachment; filename=' . $newFilename,
];
// 输出文件到浏览器
return response()->download($localFile, $newFilename, $headers);
} catch (OssException $e) {
// 处理异常
return response()->json(['message' => '下载失败!']);
}
}
}
```
3. 在路由中添加对应的路由,例如:
```php
Route::get('/download/{url}', [DownloadController::class, 'download']);
```
4. 在浏览器中访问对应的 URL,例如:
```
http://yourdomain.com/download/path/to/oss/file.jpg
```
这样就可以将对应的 OSS 文件下载到浏览器中,并且在下载的同时修改文件名称。
阅读全文