奥斯特里奥:文件包工作正常,但无法访问图像



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

assets/app/uploads/Images/twLXDmCTiqyGy4Yq7.jpg

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

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

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

----编辑----

添加更多详细信息以帮助弄清楚这一点。

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

export const Images = new FilesCollection({

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

--- 编辑 2 ---

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

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

你应该能够像这样得到它:

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

也可以自己创建类似,它遵循以下简单的命名约定:

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

通常静态资产保存在应用程序结构中的公共下,因此 public/images/picture.jpg 在 HTML 中以/images/picture.jpg 的形式提供。

不幸的是,您无法将上传的文件保存到此目录(您可能知道),因此需要另一种策略。

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

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

这可能还不是一个完整的答案,但如果你能提供更多信息,我们可以到达那里

最新更新