我让ostrio:files
包在我的应用程序中工作,所以我的图像正在上传到服务器(据我所知),并且数据库有对它们的引用,但我不知道如何实际提供它们。例如,我今天早上上传了一张图片。数据库包含原始名称及其现在存在的文件路径:
assets/app/uploads/Images/twLXDmCTiqyGy4Yq7.jpg
问题是,当我把它放到URL中时,它只会返回我的应用程序的主页。我尝试将上传目录更改为/images/
但仍然遇到同样的问题。除了在构建包时包含图像之外,我似乎无法在 Meteor 的文档中找到关于如何为图像开辟路径的明确答案,但这违背了用户输入的目的。
我还注意到我的应用程序中的programs/web.browser/program.json
文件似乎控制了允许可见的内容,但理想情况下,我只想打开我的/images 目录以查看任何图像(当然,只有直接路径 - 我不想要目录列表)。有这种可能吗?
此外,我在文档中找到了config.public
配置选项,并将其设置为 true,并设置了storagePath
和downloadRoute
路径。我设置的路径来自我的服务器底部(使用/作为路径的开头),但我似乎仍然无法查看我上传的任何图像 - 它只是为我的应用程序加载我的默认主页
----编辑----
添加更多详细信息以帮助弄清楚这一点。
我在/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 服务器一起运行本地资产的方式。
这可能还不是一个完整的答案,但如果你能提供更多信息,我们可以到达那里