0

根据我的要求,想要访问我的 GCDWebUploader 的 iOS 设备照片应用程序文件 url(而不是文件作为数据)。我想要我的网络服务器的资产库网址。

NSString* documentsPath =[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];

_webServer = [[GCDWebUploader alloc] initWithUploadDirectory: documentsPath];
// this is working and document directory files shown on browser.

_webServer = [[GCDWebUploader alloc] initWithUploadDirectory:assetsUrl];  // this is not working.Nothing shown on browser.   //assetsUrl= assets library url for file from photos app

_webServer.delegate = self;
_webServer.allowHiddenItems = YES;
[_webServer start];

如果文档目录,我的网络服务器会在 PC 浏览器上显示所有照片应用程序图像和视频。此功能已使用 GCDWebUploader 完成。但我找不到资产 url 的行为类似于文件路径。

我不想将照片应用程序文件复制到文档目录并使用。而是直接从资产库访问。

我希望资产 url 像文档目录文件路径一样工作。请帮助我。

4

1 回答 1

3

资产 URL 如下所示:

assets-library://asset/asset.JPG?id=CD12228F-0E99-4ABD-999D-6A76F54024E7&ext=JPG

这是一个内部 URL,ALAssetsLibrary在此上下文之外没有任何意义。你不能期望将这个 URL 传递给 GCDWebServer 并期望服务器神奇地用它做一些事情。

此外,根据定义,GCDWebServer 只能提供带有HTTP方案的 URL,主机名与您的 iPhone/iPad 网络名称匹配,以及您已实现处理程序的路径。

例如,如果您GET为 path 实现了一个处理程序/photos/index.html,那么使用 Web 浏览器连接到您的 iPhone/iPadhttp://my-device.local/photos/index.html将调用 GCDWebServer 上的相应处理程序,然后可以返回一些内容(如 HTML 网页或图像文件)。

但是,assets-library://asset/asset.JPG从您的 Web 浏览器连接并没有任何意义,并且会失败。

http://my-device.local/asset.JPG?id=CD12228F-0E99-4ABD-999D-6A76F54024E7&ext=JPG如果您GET在 GCDWebServer 中没有该路径的处理程序,则连接也将失败。

因此,简而言之,要ALAssetsLibrary使用 GCDWebServer 提供照片,您可以这样做:

  1. 实现一个默认处理程序来捕获所有GET请求
  2. GET为请求实现一个处理程序(您必须在默认处理程序之后/index.html将其添加到 GCDWebServer 实例)

/index.html处理程序的实现中,您返回一个 HTML 网页,其中列出了来自 的照片资产的 URL ALAssetsLibrary,每个 URL 都有一个相对 URL 链接,例如<a href="/asset.JPG?id=CD12228F-0E99-4ABD-999D-6A76F54024E7&ext=JPG">My photo link</a>(资产 URL 的路径部分)。

在默认处理程序的实现中,您检索GCDWebServerRequest, prepend的路径assets-library://asset,并返回原始资产 URL: assets-library://asset/asset.JPG?id=CD12228F-0E99-4ABD-999D-6A76F54024E7&ext=JPG。通过这个 URL,您最终可以检索资产数据,即 JPEG 图像,并使用 a 返回它GCDWebServerDataResponse(不要忘记将 MIME 类型设置为image/jpeg)。

于 2015-08-03T02:43:32.903 回答