Конвертировать URL пути Ios Photo Album так же, как в папке с документами File-path

Согласно моему требованию, я хочу получить доступ к URL-адресу файла приложения для фотографий устройства iOS (а не файла в качестве данных) для моего GCDWebUploader. Я хочу 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];

Мой веб-сервер отображает все фотографии и видео из приложения в браузере ПК, если каталог документов. Эта функция уже выполнена с помощью GCDWebUploader. но я не могу найти URL ресурса, ведущий себя как путь к файлу.

Я не хочу копировать файлы приложения для фотографий в каталог документов и использовать. Но прямой доступ из библиотеки ресурсов.

Я хочу, чтобы URL ресурсов работал так же, как путь к каталогу документов. пожалуйста, помогите мне за это.

1 ответ

Решение

URL ресурса выглядит так:

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

Это внутренний URL для ALAssetsLibrary что ничего не значит вне этого контекста. Вы не можете ожидать, что передадите этот URL-адрес GCDWebServer и ожидаете, что сервер волшебным образом что-то с ним сделает.

Кроме того, GCDWebServer по определению может обслуживать только URL с HTTP схема, с именем хоста, совпадающим с именем сети вашего iPhone/iPad, и с путями, для которых вы реализовали обработчики.

Например, если вы реализовали GET обработчик для пути /photos/index.html, а затем подключиться к вашему iPhone/iPad с помощью веб-браузера на http://my-device.local/photos/index.html вызовет соответствующий обработчик на GCDWebServer, который затем может вернуть некоторый контент (например, веб-страницу HTML или файл изображения).

Однако подключение к assets-library://asset/asset.JPG с вашего веб-браузера ничего не значит и потерпит неудачу.

Присоединенный к 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, например <a href="/asset.JPG?id=CD12228F-0E99-4ABD-999D-6A76F54024E7&ext=JPG">My photo link</a> (часть пути URL ресурса).

В реализации обработчика по умолчанию вы получаете путь GCDWebServerRequest, готовый assets-library://asset, и это возвращает вам исходный URL ресурса: assets-library://asset/asset.JPG?id=CD12228F-0E99-4ABD-999D-6A76F54024E7&ext=JPG, С помощью этого URL вы можете, наконец, получить данные об активе, то есть изображение JPEG, и вернуть его, используя GCDWebServerDataResponse (не забудьте установить тип MIME в image/jpeg).

Другие вопросы по тегам