Meteor android app没有显示图像

时间:2016-11-08 01:06:12

标签: javascript meteor blob gridfs

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

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

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

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

以下是Vaughn在文档中的说明:

  

使用Meteor 1.2 +的Cordova Android Bug

     

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

     

App.accessRule("斑点:*&#34);

我已经做过,但没有成功。

我还看到文档引用设置标题来处理CORS问题,如下所示:

import Tkinter as tk

class GUI(tk.Tk):

    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        tk.Tk.geometry(self, '580x410')
        container = tk.Frame(self)

        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}

        frame = FirstPage(container, self)
        self.frames[FirstPage] = frame
        frame.grid(row=0, column=0, sticky="nsew")

        frame = self.frames[FirstPage]
        frame.tkraise()

        page_name = FirstPage.__name__
        self.frames[page_name] = frame


    def get_page(self, page_name):
        return self.frames[page_name]


class FirstPage(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        self.text = tk.Text(self , height=25, width=80)
        self.text.grid(column=0, row=0, sticky="nw")



app = GUI()
app.get_page("FirstPage").text.insert("1.0", "Hello, world")
app.mainloop()

但又没有成功。

查看检查器上的网络选项卡,我甚至无法看到来自服务器的图像请求,这表明它被Cordova代码中的某些内容拒绝,而且它甚至都没有试图出去拍照。

我使用Vaughn的演示应用程序重现了这个问题,我已经分叉并添加了android平台,所以如果你想尝试帮助,它已经准备好了。

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

如果你做流星运行android-device它应该在Android上运行。您需要注册然后上传图像才能看到问题。从浏览器中它可以正常工作。

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

1 个答案:

答案 0 :(得分:1)

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

当我遇到这个问题时,我刚刚部署到生产中并且它在移动设备上工作,因为图像源指向互联网上的网址,而不是相对于设备。这适用于生产,但不适用于开发测试。

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

我做的第一步是将ROOT_URL env变量和移动服务器设置为指向本地服务器。当你在本地运行meteor时,你可以运行这样的命令来设置这些变量,使用你的计算机的本地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就消失了,那里的权限发生了什么

之后,图像显示在我的Android设备上。