在 Laravel 中对接阿里云 OSS 进行文件存储,可按以下步骤操作:
首先,你需要安装 jacobcyl/ali-oss-storage
扩展包,它可以帮助 Laravel 与阿里云 OSS 进行集成。在项目根目录下,通过 Composer 来安装该扩展包:
composer require jacobcyl/ali-oss-storage
在 .env
文件中添加阿里云 OSS 的相关配置信息,你可以从阿里云 OSS 控制台获取这些信息:
ALIYUN_OSS_ACCESS_ID=your-access-key-id
ALIYUN_OSS_ACCESS_KEY=your-access-key-secret
ALIYUN_OSS_ENDPOINT=your-endpoint
ALIYUN_OSS_BUCKET=your-bucket-name
ALIYUN_OSS_IS_CNAME=false
ALIYUN_OSS_SECURE_URL=false
ALIYUN_OSS_ACCESS_ID
:阿里云访问密钥 ID。ALIYUN_OSS_ACCESS_KEY
:阿里云访问密钥 Secret。ALIYUN_OSS_ENDPOINT
:OSS 访问域名,例如 oss-cn-hangzhou.aliyuncs.com
。ALIYUN_OSS_BUCKET
:要使用的 OSS 存储空间名称。ALIYUN_OSS_IS_CNAME
:是否使用自定义域名,默认为 false
。ALIYUN_OSS_SECURE_URL
:是否使用 HTTPS 协议,默认为 false
。打开 config/filesystems.php
文件,在 disks
数组中添加阿里云 OSS 的配置:
'disks' => [
// 其他磁盘配置...
'aliyun-oss' => [
'driver' => 'aliyun-oss',
'access_id' => env('ALIYUN_OSS_ACCESS_ID'),
'access_key' => env('ALIYUN_OSS_ACCESS_KEY'),
'bucket' => env('ALIYUN_OSS_BUCKET'),
'endpoint' => env('ALIYUN_OSS_ENDPOINT'),
'isCName' => env('ALIYUN_OSS_IS_CNAME', false),
'secureUrl' => env('ALIYUN_OSS_SECURE_URL', false),
'cdnDomain' => '', // 可选,CDN 域名
],
],
以下是一个简单的控制器方法示例,用于处理文件上传到阿里云 OSS:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class FileController extends Controller
{
public function upload(Request $request)
{
// 验证文件
$request->validate([
'file' => 'required|mimes:jpg,png,pdf|max:2048',
]);
// 存储文件到阿里云 OSS
if ($request->hasFile('file')) {
$path = $request->file('file')->store('uploads', 'aliyun-oss');
return response()->json([
'message' => '文件上传成功',
'path' => $path
]);
}
return response()->json([
'message' => '文件上传失败'
], 400);
}
}
在上述代码中,store
方法的第一个参数 uploads
是存储在 OSS 中的目录,第二个参数 aliyun-oss
是使用的磁盘名称。
在 routes/web.php
中定义路由来调用上述控制器方法:
use Illuminate\Support\Facades\Route;
Route::post('/file/upload', [FileController::class, 'upload']);
若要从阿里云 OSS 下载文件,可以使用以下代码:
use Illuminate\Support\Facades\Storage;
public function download($filename)
{
$path = 'uploads/'.$filename;
if (Storage::disk('aliyun-oss')->exists($path)) {
return Storage::disk('aliyun-oss')->download($path);
}
return response()->json([
'message' => '文件不存在'
], 404);
}
删除阿里云 OSS 上的文件可以使用以下代码:
use Illuminate\Support\Facades\Storage;
public function delete($filename)
{
$path = 'uploads/'.$filename;
if (Storage::disk('aliyun-oss')->exists($path)) {
$deleted = Storage::disk('aliyun-oss')->delete($path);
if ($deleted) {
return response()->json([
'message' => '文件删除成功'
]);
}
}
return response()->json([
'message' => '文件删除失败'
], 400);
}
通过以上步骤,你就可以在 Laravel 项目中实现与阿里云 OSS 的对接,完成文件的上传、下载和删除等操作。