ostrio:文件包正在运行,但无法访问图片

时间:2018-01-14 14:40:59

标签: node.js meteor angular-meteor

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

assets/app/uploads/Images/twLXDmCTiqyGy4Yq7.jpg

问题是,当我把它放入网址时,它只会返回我应用的主页。我尝试将上传目录更改为/images/但仍有同样的问题。我似乎无法在Meteor的文档中找到关于如何打开图像路径的明确答案,除了在构建软件包时包含它们,但这会破坏用户输入的目的。

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

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

---- ---- 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所指出的那样,我还有其他一些尚未删除的程序包。他们在干扰并导致这种情况无效。

2 个答案:

答案 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。这不起作用吗?如果您要制定自己的网址,并且要部署到移动网址,则网址必须是绝对的,而不是相对的,因为移动应用程序与本地网络服务器一起运行本地资产的方式。

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