ostrio:files 包正在运行,但无法访问图像

ostrio:files package is working, but can’t access image

我的应用程序中有 ostrio:files 包,所以我的图像正在上传到服务器(据我所知)并且数据库有对它们的引用,但我不知道如何实际为他们服务。例如,我今天早上上传了一张图片。 DB包含原始名称,以及现在存在的文件路径:

assets/app/uploads/Images/twLXDmCTiqyGy4Yq7.jpg

问题是,当我将其放入 url 时,它只是 returns 我应用程序的主页。我尝试将上传目录更改为 /images/ 但仍然有同样的问题。除了在构建包时包含它们之外,我似乎无法在 Meteor 的文档中找到关于如何为图像打开路径的明确答案,但这违背了用户输入的目的。

我还注意到我的应用程序中的 programs/web.browser/program.json 文件似乎控制了允许显示的内容,但理想情况下,我只想打开我的 /images 目录来查看任何图像(仅直接路径,当然——我不想要目录列表)。有这种可能吗?

此外,我在documentation中找到了config.public配置选项,并将其设置为true,同时设置了storagePathdownloadRoute路径。我设置的路径来自我的服务器的基础(使用 / 作为路径的开头)但我似乎仍然无法查看我上传的任何图像 - 它只是加载我的应用程序的默认主页

----编辑----

添加更多详细信息以帮助解决这个问题。

我在 /imports/api/images.js 文件中设置了我的 FileCollection,如下所示:

export const Images = new FilesCollection({

稍后,在另一个文件中,我导入 api 并使用 Images.insert({ 进行上传,然后使用 upload.on('end', function 进行上传。我猜那是我缺少将文件保存到我的文件系统的地方?希望这有助于并提供更多调试细节。另外,当我确实有一个 FileCursor 对象时,我尝试 link() 方法,它只是 returns link is not a function。我基本上只是跟着 Meteor Files GitHub Example.

--- 编辑 2 ---

正如@Rolljee 所指出的,我的项目中还有其他我没有删除的包。他们在干扰并导致这不起作用。

通常静态资产在您的应用程序结构中保存在 public 下,因此 public/images/picture.jpg 在您的 HTML.[=11 中可用作 /images/picture.jpg =]

不幸的是你不能将上传的文件保存到这个目录(你可能知道这一点),所以需要另一种策略。

你没有说你的问题是在开发中还是在生产中。

示例代码使用 <img src={{file.link}}< - 这意味着程序包将根据配置为您提供 url。这行不通吗?如果您正在制定自己的 url,并且要部署到移动设备,则 URL 需要是绝对的,而不是相对的,因为移动应用程序 运行 与本地本地资产的 Web 服务器。

这可能还不是一个完整的答案,但如果您能提供更多信息,我们就能找到答案

当您在 FilesCollection 集合中存储新记录时,它会自动创建 link() 方法,您可以使用该方法获取它为您的文件提供服务的路径。

你应该可以这样获取:

const theUrl = MyFilesCollection.findOne(someId).link();

也可以自己创建,遵循这个简单的命名约定:

link: `${Meteor.absoluteUrl() + file._downloadRoute}/${file._collectionName}/${file._id}/original/${file._id}.${file.extension}`,