【问题标题】:Meteor android app not showing imagesMeteor android应用程序不显示图像
【发布时间】:2017-03-21 12:20:37
【问题描述】:

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

https://atmospherejs.com/vsivsi/file-collection

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

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

这是 Vaughn 在文档中的注释:

带有 Meteor 1.2+ 的 Cordova Android 错误

由于与 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();
        }
      },

但又没有成功。

查看检查器上的网络选项卡,我什至看不到来自服务器的图像请求,这表明它被 Cordova 代码中的某些东西拒绝了,它甚至没有尝试出去获取图片。

我已经使用 Vaughn 的演示应用重现了这个问题,我已经分叉并添加了 android 平台,所以如果你愿意尝试和帮助,它就可以开始了。

https://github.com/mikkelking/meteor-file-sample-app

如果你做一个流星运行 android-device 它应该在 Android 上运行。您将需要注册然后上传图片以查看问题。在浏览器上它工作正常。

任何帮助将不胜感激,这对我的项目来说是一个阻碍。我考虑过的一种选择是将图像移动到 S3 存储桶,我认为这应该可以,但如果可以的话,我想将图像保留在数据库中。

【问题讨论】:

  • @GhostCat 我对那个帖子发表了评论,我没有将其标记为编辑。
  • 嗯,您根据猜测可能是什么问题投票支持“OK”。这真的没有帮助。最后,OP 应该提供更多信息,否则,任何 OK 或编辑投票都不是正确的决定。无论如何,我很欣赏快速而善良的回归!

标签: javascript meteor blob gridfs


【解决方案1】:

我曾经在使用 gridfs 时遇到过类似的问题。我相信问题的出现是因为图像来源是相对来源。所以你的图像源来自本地主机。它适用于 Web 版本,因为浏览器与您的服务器位于同一台机器上,因此 localhost 源可以正常工作。但在 android 设备上它不起作用,因为该设备上没有提供图像。

当我遇到这个问题时,我刚刚部署到生产环境中,它可以在移动设备上运行,因为图像源指向的是互联网上的 URL,而不是与设备相关的 URL。这适用于生产,但不适用于开发测试。

当我看到这个问题时,我克隆了你的代码并让它在本地开发者的 android 设备上运行。

我做的第一步是设置 ROOT_URL 环境变量和移动服务器指向你的本地服务器。当您在本地运行流星时,您可以使用计算机的本地 IP 地址运行这样的命令来设置这些变量

export ROOT_URL=http://192.168.1.255:3000 && meteor run android-device --mobile-server=http://192.168.1.255:3000

接下来,在您的 sample.coffee Template.collTest.helpers 链接函数中,您需要使用绝对网址而不是相对网址(这样在您的移动设备上它会查看您的本地服务器而不是本地主机)。要动态获取它以便它在不同的服务器上工作,您可以使用类似这样的东西

Meteor.absoluteUrl(myData.baseURL + "/md5/" + this.md5)

然后我必须将计算机的IP地址http://192.168.1.255:3000添加到sample.jade文件中的内容安全策略中。

我差点忘了,此时我遇到了 403 禁止错误。我更改了 sample.coffee 中的 myData.allow 读取函数并返回 true 并且 403 消失了,那里的权限发生了一些事情

之后,图像出现在我的安卓设备上。

【讨论】:

  • 非常感谢您的帮助,这让我很受不了,我现在就试试看!
  • 你是赢家!我可以给你寄点东西作为感谢吗?
猜你喜欢
  • 2015-07-08
  • 1970-01-01
  • 2017-06-12
  • 2016-10-01
  • 2018-03-05
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多