首页 > PHP > Laravel 存储文件 对接阿里云oss

Laravel 存储文件 对接阿里云oss

2025-03-03 15:08:39

在 Laravel 中对接阿里云 OSS 进行文件存储,可按以下步骤操作:

1. 安装依赖包

首先,你需要安装 jacobcyl/ali-oss-storage 扩展包,它可以帮助 Laravel 与阿里云 OSS 进行集成。在项目根目录下,通过 Composer 来安装该扩展包:

composer require jacobcyl/ali-oss-storage

2. 配置阿里云 OSS 信息

在 .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

3. 配置文件系统

打开 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 域名
    ],
],

4. 文件上传示例

以下是一个简单的控制器方法示例,用于处理文件上传到阿里云 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 是使用的磁盘名称。

5. 定义路由

在 routes/web.php 中定义路由来调用上述控制器方法:

use Illuminate\Support\Facades\Route;

Route::post('/file/upload', [FileController::class, 'upload']);

6. 文件下载示例

若要从阿里云 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);
}

7. 文件删除示例

删除阿里云 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 的对接,完成文件的上传、下载和删除等操作。

使用 Ctrl+D 可将网站添加到书签
收藏网站
扫描二维码
关注早实习微信公众号
官方公众号
Top