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,同时设置了storagePath
和downloadRoute
路径。我设置的路径来自我的服务器的基础(使用 / 作为路径的开头)但我似乎仍然无法查看我上传的任何图像 - 它只是加载我的应用程序的默认主页
----编辑----
添加更多详细信息以帮助解决这个问题。
我在 /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}`,
我的应用程序中有 ostrio:files
包,所以我的图像正在上传到服务器(据我所知)并且数据库有对它们的引用,但我不知道如何实际为他们服务。例如,我今天早上上传了一张图片。 DB包含原始名称,以及现在存在的文件路径:
assets/app/uploads/Images/twLXDmCTiqyGy4Yq7.jpg
问题是,当我将其放入 url 时,它只是 returns 我应用程序的主页。我尝试将上传目录更改为 /images/
但仍然有同样的问题。除了在构建包时包含它们之外,我似乎无法在 Meteor 的文档中找到关于如何为图像打开路径的明确答案,但这违背了用户输入的目的。
我还注意到我的应用程序中的 programs/web.browser/program.json
文件似乎控制了允许显示的内容,但理想情况下,我只想打开我的 /images 目录来查看任何图像(仅直接路径,当然——我不想要目录列表)。有这种可能吗?
此外,我在documentation中找到了config.public
配置选项,并将其设置为true,同时设置了storagePath
和downloadRoute
路径。我设置的路径来自我的服务器的基础(使用 / 作为路径的开头)但我似乎仍然无法查看我上传的任何图像 - 它只是加载我的应用程序的默认主页
----编辑----
添加更多详细信息以帮助解决这个问题。
我在 /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}`,