You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel9+Vue3跨域图片加载遇CORB拦截问题求助

问题分析与解决方案

问题背景

使用Laravel 9和Vue.js 3,本地两个项目分别运行在8000和8001端口。尝试从8001端口加载图片到8000端口展示时,遭遇CORB拦截,提示响应MIME类型为text/html,但请求的是图片资源。已创建Laravel存储符号链接并配置CORS,问题仍存在。

相关代码

8001端口项目的控制器store方法:

public function store(Request $request)
{
    $validatedData = $request->validate([
        'nama' => 'required',
        'alamat' => 'required',
        'nomor' => 'required',
        'email' => 'required|email',
        'image' => 'required|image',
    ]);

    $formulir = new Formulirs;
    $formulir->nama = $validatedData['nama'];
    $formulir->alamat = $validatedData['alamat'];
    $formulir->nomor = $validatedData['nomor'];
    $formulir->email = $validatedData['email'];

    $image = $request->file('image');
    $imageName = time().$image->getClientOriginalName();
    $image->storeAs('public/images', $imageName);
    $formulir->image = $imageName;

    $formulir->save();

    return response()->json('Data berhasil dikirim');
}

8000端口项目中图片调用代码:

<img :src="'http://localhost:8001/storage/app/public'+formulir.image">

核心问题

1. 图片URL路径错误(主要原因)

Laravel的storage:link符号链接是将storage/app/public映射到项目根目录的public/storage,因此可通过Web访问的图片路径应为/storage/images/[图片名],而非你当前使用的/storage/app/public/[图片名]。

当前错误的URL会导致服务器返回404错误页面(MIME类型为text/html),这就是CORB提示MIME类型不匹配的根本原因——你请求的是图片,但实际收到的是HTML错误页。

2. CORS配置验证(次要检查项)

Laravel 9默认的CORS配置在config/cors.php,需确保以下配置正确:

  • allowed_origins包含http://localhost:8000
  • allowed_methods包含GET(图片请求为GET方法)
  • allowed_headers包含常见请求头(或设为['*']临时测试)

解决方案

步骤1:修正图片URL路径

将Vue中的图片src修改为正确的访问路径:

<img :src="'http://localhost:8001/storage/images/' + formulir.image">

步骤2:确认存储符号链接有效性

重新执行Laravel存储链接命令,确保符号链接正确创建:

php artisan storage:link

步骤3:验证CORS配置

打开config/cors.php,调整配置如下:

return [
    'paths' => ['api/*', 'storage/*'], // 新增storage路径允许CORS
    'allowed_methods' => ['*'],
    'allowed_origins' => ['http://localhost:8000'],
    'allowed_origins_patterns' => [],
    'allowed_headers' => ['*'],
    'exposed_headers' => [],
    'max_age' => 0,
    'supports_credentials' => false,
];

修改后重启8001端口的Laravel服务,使配置生效。

步骤4:测试图片访问

直接在浏览器地址栏访问http://localhost:8001/storage/images/[你的图片名],确认能正常加载图片(返回正确的图片MIME类型,如image/jpeg)。如果能正常显示,再在8000端口的Vue项目中测试加载。

内容的提问来源于stack exchange,提问作者clintondave10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 17:01:12