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

如何在Laravel中上传并存储.gltf格式3D模型文件

问题原因

  1. 前端输入框存在语法错误,id属性缺少闭合引号,可能导致部分浏览器提交表单时识别异常
  2. glTF文件体积通常远大于常规图片,超出php.ini默认的上传大小限制时会被服务器直接丢弃,导致请求中拿不到文件
  3. 纯文本格式的.gltf本身就是合法JSON结构,旧版本Laravel依赖的MIME类型检测库未收录model/gltf+json类型,会将其识别为application/json,自动生成文件名时会错误使用.json后缀
  4. 若添加了上传文件验证规则,未包含glTF相关扩展名/MIME类型时,文件会被验证中间件过滤,返回null

解决方案

  • 首先修正前端input语法错误,如需上传关联资源可以添加multiple属性:
<input type="file" name="file-3D" id="file-3D">
  • 调整php.ini配置参数,匹配你的3D文件最大上传需求,修改后重启PHP服务:
upload_max_filesize = 20M
post_max_size = 20M
max_execution_time = 60
  • 若存在上传验证规则,添加glTF相关的验证规则:
// 扩展名验证
'file-3D' => 'file|mimes:gltf,glb,bin|max:20480',
// 更严格的MIME类型验证
'file-3D' => 'file|mimetypes:model/gltf+json,model/gltf-binary,application/octet-stream|max:20480'
  • 修改存储逻辑,手动指定文件扩展名,避免自动生成错误后缀:
if ($request->hasFile('file-3D')) {
    $threeD_file = $request->file('file-3D');
    // 获取原文件正确扩展名
    $extension = $threeD_file->getClientOriginalExtension();
    // 生成随机文件名+正确扩展名
    $filename = \Str::random(40) . '.' . $extension;
    $threeD_file->storeAs('public/product/', $filename);
    $product->threeD_img = $filename;
}
  • 若使用的是带外部资源的.gltf格式,需要前端支持多文件上传,后端将同一份模型的.gltf、.bin、纹理图存储到同一目录下,避免模型加载时找不到关联资源。嫌麻烦可以统一要求用户上传单文件二进制格式的.glb模型,无需处理多文件关联问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:54:03