我处于以下情况:
- Laravel 8应用程序。
- 由用户上传的 STL 文件存储在
storage/app/users/{userid}
文件夹中。 - STL 是私有的,可能不在公用文件夹中,因此可能并非所有人都可以访问。
现在我正在尝试通过 javascript 访问这些私有 STL 文件,以将它们加载到我的 Three.js 场景中以供查看。
我的问题是:如果我尝试使用storage_path()
我的 Laravel 控制器中的函数预先从数据库中获取文件路径,然后将此文件路径(例如本地/Users/Leon/MyLaravelApp/storage/app/users/1/file.stl
:)传递给我的 Three.js STLLoader 函数:
import * as THREE from 'three';
import { STLLoader } from 'three/examples/jsm/loaders/STLLoader.js';
// {...}
let THREE_loader = new STLLoader();
let THREE_geometry;
THREE_loader.load(filePath, function (geometry) {
THREE_geometry = geometry;
// {...}
});
我 - 当然 - 每次尝试时都会收到错误消息 404,因为给定的路径是相对于我的网络根目录的,因此不正确!
[错误] 加载资源失败:服务器响应状态为 404(未找到) http://127.0.0.1:8000/Users/Leon/MyLaravelApp/storage/app/users/1/file.stl
现在我的问题是:
有没有办法解决这个问题?如何在我的 Laravel 8 应用程序中从 javascript 访问私有文件(不在公用文件夹中)?必须有解决方案吗?
我想到的其他解决方案:
- 将文件直接存储在数据库中-> 文件太大?!
- 在数据库的公共(!)文件夹中存储文件的“安全”加密文件路径->不够安全?!
但这两种“解决方案”绝对不是我的最爱之一!
也许有人可以指出我正确的方向?
最好的问候,莱昂