Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Meteor android应用程序未显示图像_Javascript_Meteor_Blob_Gridfs - Fatal编程技术网

Javascript Meteor android应用程序未显示图像

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

我正在使用优秀的文件收集软件包

在我的Mongo数据库中存储图像。在Android上运行应用程序不会显示图像(它们显示为损坏的图像)。在浏览器中,它是完美的

我不认为这个问题是这个包独有的,因为它使用Mongo的gridfs来存储图像,并提供URL来访问它们

以下是文档中沃恩的注释:

流星1.2+的Cordova Android Bug

由于与Meteor一起使用的Cordova Android版本中存在缺陷 1.2,您需要将以下内容添加到您的mobile-config.js中,否则您将在Android设备上遇到此软件包的问题:

App.accessRule(“blob:”)

我已经做到了,但没有成功

我还看到文档参考设置标题以处理CORS问题,如下所示:

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.coffee
Template.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应该提供更多信息,如果没有这些信息,任何“确定”或“编辑”投票都不是正确的决定。不管怎么说,我很感激你的迅速而友好的复出!