Javascript Meteor android应用程序未显示图像
我正在使用优秀的文件收集软件包 在我的Mongo数据库中存储图像。在Android上运行应用程序不会显示图像(它们显示为损坏的图像)。在浏览器中,它是完美的 我不认为这个问题是这个包独有的,因为它使用Mongo的gridfs来存储图像,并提供URL来访问它们 以下是文档中沃恩的注释: 流星1.2+的Cordova Android Bug 由于与Meteor一起使用的Cordova Android版本中存在缺陷 1.2,您需要将以下内容添加到您的mobile-config.js中,否则您将在Android设备上遇到此软件包的问题: App.accessRule(“blob:”) 我已经做到了,但没有成功 我还看到文档参考设置标题以处理CORS问题,如下所示:Javascript Meteor android应用程序未显示图像,javascript,meteor,blob,gridfs,Javascript,Meteor,Blob,Gridfs,我正在使用优秀的文件收集软件包 在我的Mongo数据库中存储图像。在Android上运行应用程序不会显示图像(它们显示为损坏的图像)。在浏览器中,它是完美的 我不认为这个问题是这个包独有的,因为它使用Mongo的gridfs来存储图像,并提供URL来访问它们 以下是文档中沃恩的注释: 流星1.2+的Cordova Android Bug 由于与Meteor一起使用的Cordova Android版本中存在缺陷 1.2,您需要将以下内容添加到您的mobile-config.js中,否则您将在An
myFiles = new FileCollection('myFiles',
{ resumable: true, // Enable built-in resumable.js chunked upload support
http: [ // Define HTTP route
{ method: 'get', // Enable a GET endpoint
path: '/:md5', // this will be at route "/gridfs/myFiles/:md5"
lookup: function (params, query) { // uses express style url params
return { md5: params.md5 }; // a query mapping url to myFiles
},
handler: function (req, res, next) {
if (req.headers && req.headers.origin) {
res.setHeader('Access-Control-Allow-Origin', 'http://meteor.local'); // For Cordova
res.setHeader('Access-Control-Allow-Credentials', true);
}
next();
}
},
但同样没有成功
查看inspector上的“网络”选项卡,我甚至看不到来自服务器的图像请求,这表明它被Cordova代码中的某些内容拒绝,而且它甚至没有尝试出去获取图像
我已经使用沃恩的演示应用程序重现了这个问题,我已经分叉并添加了安卓平台,所以如果您愿意尝试并提供帮助的话,它已经准备好了
如果你使用meteor运行的android设备,它应该在android上运行。您需要注册,然后上传一张图片来查看问题。从浏览器上看,它工作正常
任何帮助将不胜感激,这是一个显示我的项目停止。我考虑过的一个选择是将图像移动到S3存储桶,我认为这应该可以,但如果可以的话,我希望将图像保留在db中。我曾经遇到过与gridfs类似的问题。我相信这个问题是因为图像源是一个相对的源。因此,您的图像源来自localhost。它可以在web版本上工作,因为浏览器与服务器位于同一台机器上,所以本地主机源可以正常工作。但在安卓设备上,它无法工作,因为该设备不提供图像 当我遇到这个问题时,我只是将其部署到生产环境中,并在移动设备上运行,因为图像源指向互联网上的url,而不是与设备相关的url。这适用于生产,但不适用于开发人员测试 当我看到这个问题时,我克隆了你的代码,并让它在本地开发人员的android设备上运行 我做的第一步是将ROOT_URL env变量和mobile server设置为指向本地服务器。当您在本地运行meteor时,您可以使用计算机的本地ip地址运行这样的命令来设置这些变量
export ROOT\u URL=http://192.168.1.255:3000 &&meteor运行的android设备——移动服务器=http://192.168.1.255:3000
接下来,在sample.coffeeTemplate.collTest.helpers
link函数中,您需要使用绝对url而不是相对url(这样,在移动设备上,它将查看本地服务器而不是本地主机)。要动态地获取它,以便它在不同的服务器上工作,您可以使用类似这样的方法
Meteor.absoluteUrl(myData.baseURL+“/md5/”+this.md5)
然后我必须添加计算机的ip地址http://192.168.1.255:3000
添加到sample.jade文件中的内容安全策略
我差点忘了,在这一点上,我得到了一个403禁止的错误。我更改了sample.coffee中的myData.allow read函数,刚返回true,403不见了,权限出现了问题
之后,该图像出现在我的android设备上。非常感谢您的帮助,这让我非常痛苦,我现在就要尝试一下!你是赢家!我可以给你发点东西作为感谢吗?@GhostCat我在那篇帖子上发表了评论,我没有把它标记为编辑。好吧,你是根据猜测可能有什么问题而投票赞成“OK”的。这真的没用。最后,OP应该提供更多信息,如果没有这些信息,任何“确定”或“编辑”投票都不是正确的决定。不管怎么说,我很感激你的迅速而友好的复出!