【问题标题】:How can I construct the URL of images stored on a private server?如何构建存储在私人服务器上的图像的 URL?
【发布时间】:2016-01-31 03:03:36
【问题描述】:

在某些情况下,我正在编写一个 iPhone 应用程序,该应用程序必须在首次启动时获取大量(~500 MB)PNG 图像。在我的研究中,我遇到了 AFNetworking 和 NSURLSession 作为获取图像的可能方式,但是这两个 API 都需要一个 URL,例如,

NSURL* imageURL = [NSURL URLWithString:@"http://www.google.com/images/imageName.png"];

我的问题是,如果我要检索的图像或图像数据不在诸如 http://www.google.com 之类的公共域中,而是位于已知 IP 地址的某个私有服务器中,例如我的 DigitalOcean 液滴,我该如何检索还是构造它的 URL?

我知道服务器上图像的确切路径,只是不知道如何从 iOS 到达服务器,因为我在 stackoverflow 上找到的所有示例都假设我使用的是标准的 http:// 网址。

【问题讨论】:

    标签: ios afnetworking vpn nsurl


    【解决方案1】:

    请参阅这篇文章,了解如何从您的 DigitalOcean 液滴分配/获取公共 IP 地址。 https://www.digitalocean.com/community/tutorials/how-to-use-floating-ips-on-digitalocean

    它很长,因为它是特定于供应商的。但是,应该可以在 AFNetworking 上使用公共 IP 地址。

    【讨论】:

    • 感谢您提供有用的链接。这是非常有见地的。有趣的是,它是如何特定于供应商的......所以应用程序/API 受服务器提供商的摆布,那么呢?其他应用程序/公司遵循自己的协议来寻址他们的私有服务器(例如,他们购买/构建自己的服务器机器,并且必须自己寻址)?保持话题:一旦我得到那个浮动的公共 IP 地址,我如何把它变成 NSURL 或其 AFNetworking 包装器?
    • 供应商特定的部分是如何将静态 IP 地址或域名应用到您的服务器。一旦你有一个与你的服务器相关联的 IP 地址或域名,只需像这样构造 NSURL:http://:/path/to/your/api。 ip地址如xxx.xxx.xxx.xxx,端口一般为80或443。
    • 有没有办法通过浏览器或其他方式来检查(作为健全性测试)?我试过xxx.xxx.xxx.xx:80/root/topFolder/imageName.png 并得到一个“问题加载页面”错误。 Firefox 似乎无法连接到服务器,就好像该网页不存在一样。
    • 浏览器应该可以加载它。路径错误或没有为该 IP 地址正确配置 Droplet。
    【解决方案2】:

    只需替换

    http://www.google.com
    

    使用您的 IP 地址

    http://xxx.xxx.xxx.xxx:<port>
    

    甚至

    http://localhost:8080
    

    如果您在本地测试,则可以使用。


    请注意,域名只是一个人类可读的名称,以帮助人们轻松记住和输入,它最终会在后面返回服务器的 IP。

    顺便说一句,我建议您使用带 CNAME 记录的域来引用您的服务器,以防您的服务器出现故障或您将来想更改服务器,因此您只需更改域的 CNAME 记录即可。部署仅用于更改 url 的新 App 版本。

    【讨论】:

    • 谢谢!我在哪里可以知道我的 值?当您说 CNAME 记录时,这是注册/购买域时会附带的东西吗?因为我的主页确实有一个,但从没想过使用域(并且还没有听说过 CNAME)作为应用程序提取图像的接口..
    • @Cindeselia “我在哪里知道我的 值”:需要检查你的服务器,在你的情况下,检查 digitalOcean 的。你可以先试试不带它。而对于CNAME记录,一般是子域名,比如..com,你的首页可能会使用A记录,详细的可以搜索一下,或者直接问客户您的域名注册商的服务(如 godaddy.com 等);)
    • 有没有办法从浏览器测试这个?我尝试在我的 IP 中添加字幕,但似乎无法加载图像。再次感谢。
    • @Cindeselia 1. 确保您的服务器的相关端口(例如 8080)已打开; 2.确保网址正确。尝试在你的浏览器中打开它,c是否可以访问。
    • @Cindeselia 一些供应商有他们的控制台面板来处理几个设置,包括端口,比如 AWS。一般来说,我使用iptables,如果你使用Ubuntu作为你的DO服务器系统,你可以看看DO提供的这个教程:digitalocean.com/community/tutorials/…。是的,一旦端口打开,它将保持打开状态,直到您关闭它。是否打开端口取决于你的服务器的使用情况,比如你的情况,你最好打开80以允许HTTP访问。你可以在这里得到一个端口列表:en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 2011-11-10
    • 2017-03-14
    • 2013-05-16
    相关资源
    最近更新 更多