我的ostrio:files
软件包在我的应用程序中工作,所以我的图像上传到服务器(据我所知),并且DB有一个对它们的引用,但我不知道如何实际为他们服务。例如,我今天早上上传了一张图片。数据库包含原始名称及其现在存在的文件路径:
assets/app/uploads/Images/twLXDmCTiqyGy4Yq7.jpg
问题是,当我把它放入网址时,它只会返回我应用的主页。我尝试将上传目录更改为/images/
但仍有同样的问题。我似乎无法在Meteor的文档中找到关于如何打开图像路径的明确答案,除了在构建软件包时包含它们,但这会破坏用户输入的目的。
我也注意到我的应用程序中的programs/web.browser/program.json
文件似乎控制了允许可见的内容,但理想情况下,我只想打开我的/ images目录来查看任何图像(只有直接路径)当然 - 我不想要目录列表)。这有可能吗?
此外,我在documentation中找到config.public
配置选项,并将其设置为true,以及设置storagePath
和downloadRoute
路径。我设置的路径来自我的服务器的基础(使用/作为路径的开头)但我仍然无法查看我上传的任何图像 - 它只是加载我的应用程序的默认主页
---- ---- EDIT
添加更多细节以帮助解决这个问题。
我在我的/imports/api/images.js
文件中设置了我的FileCollection,如下所示:
export const Images = new FilesCollection({
稍后,在另一个文件中,我使用Images.insert({
导入该API并进行上传,然后使用upload.on('end', function
将其上传。我猜这是我丢失将文件保存到我的文件系统的地方?希望这有助于并提供更多调试细节。此外,当我有一个FileCursor
对象时,我会尝试link()
方法,它只返回link is not a function
。我基本上只关注Meteor Files GitHub Example。
---编辑2 ---
正如@Rolljee所指出的那样,我还有其他一些尚未删除的程序包。他们在干扰并导致这种情况无效。
答案 0 :(得分:2)
当您在FilesCollection集合中存储新记录时,它会自动创建link()方法,您可以使用该方法获取它为文件提供服务的路径。
你应该能够这样做:
const theUrl = MyFilesCollection.findOne(someId).link();
也可以自己创建类似的,它遵循这个简单的命名约定:
link: `${Meteor.absoluteUrl() + file._downloadRoute}/${file._collectionName}/${file._id}/original/${file._id}.${file.extension}`,
答案 1 :(得分:0)
通常,静态资产会在您的应用结构中保持公开状态,因此您的HTML中的/images/picture.jpg中提供了public / images / picture.jpg。
不幸的是,您无法将上传的文件保存到此目录(您可能知道这一点),因此需要另一种策略。
您不会说您的问题是在开发还是生产中。
示例代码使用<img src={{file.link}}<
- 这意味着程序包将根据配置为您提供URL。这不起作用吗?如果您要制定自己的网址,并且要部署到移动网址,则网址必须是绝对的,而不是相对的,因为移动应用程序与本地网络服务器一起运行本地资产的方式。
这可能不是一个完整的答案(但是),但如果你能提供更多信息我们可以到达那里