Отправить UIImage в LocalwebServer с помощью GCDWebServer

Мое приложение с помощью GCDWebServer Я получаю фотографию из своего iPhone-альбома с помощью AssetsLibrary и я храню их в NSDocumentDirectory . Я просто хочу получить доступ к Url на эту фотографию, чтобы показать их на веб-странице.

Есть мой код:

 [_webServer addHandlerForMethod:@"POST" path:@"/" requestClass:[GCDWebServerURLEncodedFormRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { ALAsset *asset = [self.arrayPictures objectAtIndex:0]; ALAssetRepresentation *rep = [asset defaultRepresentation]; CGImageRef iref = [rep fullResolutionImage]; UIImage *thumbnail = [UIImage imageWithCGImage:iref]; NSString* path ; if (thumbnail != nil) { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; path = [[NSString alloc] initWithString:[documentsDirectory stringByAppendingPathComponent:@"test.png"]]; NSData* data = UIImagePNGRepresentation(thumbnail); [data writeToFile:path atomically:YES]; } NSURL *url = [NSURL fileURLWithPath:path]; NSString* html = [NSString stringWithFormat:@"<html><body><img src=\"%@\" width=\"400\" height=\"500\"/></body></html>", url]; return [GCDWebServerDataResponse responseWithHTML:html]; }]; 

Для пути DocumentDirectory

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *imagePath = [[NSString alloc] initWithString:[documentsDirectory stringByAppendingPathComponent:@"test.jpg"]]; NSURL *baseURL2 = [NSURL fileURLWithPath:documentsDirectory]; NSString* html2 = [NSString stringWithFormat:@"<html><body><img src=\"%@\" width=\"400\" height=\"500\"/></body></html>", imagePath]; [_webView loadHTMLString:html2 baseURL:baseURL2]; 

Для дополнительных ресурсов

 NSString *path = [[NSBundle mainBundle] pathForResource:@"ahsan" ofType:@"jpg"]; // path to your image source. NSURL *baseURL = [NSURL fileURLWithPath:path]; NSString* html = [NSString stringWithFormat:@"<html><body><img src=\"%@\" width=\"400\" height=\"500\"/></body></html>", path]; 

Попробуйте этот код.

 GCDWebServer* webServer = [[GCDWebServer alloc] init]; [webServer addGETHandlerForBasePath:@"/" directoryPath:[[NSBundle mainBundle] bundlePath] indexFilename:nil cacheAge:3600 allowRangeRequests:YES]; [webServer runWithPort:8080]; 

Похоже, что никто не отвечает на реальный вопрос здесь: речь идет не о загрузке фотографии с iOS на веб-сервере или ее просмотре в локальном UIWebView, а о том, как использовать эту фотографию с помощью GCDWebServer чтобы пользователи могли просматривать ее, подключившись к устройству, используя веб-браузер, например, перейдя по http://my-device.local/photo-1234.jpg .

Пример кода, который вы предоставили, имеет две основные проблемы:

  • Вы создаете обработчик запросов POST когда вам нужно обрабатывать запросы GET ( POST – это отправка форм из веб-браузеров, а GET – для обычного просмотра веб-страниц и получения веб-страниц).
  • Вместо того, чтобы возвращать данные изображения, вы возвращаете HTML-страницу, которая содержит URL-адрес файла изображения локально (например, file:///some/path/photo-1234.jpg ) вместо URL-адреса HTTP, обрабатываемого GCDWebServer (например, http://my-device.local/photo-1234.jpg ). URL-адреса файлов не имеют смысла за пределами самого устройства и не будут работать.

Если у вас есть все фотографии в виде файлов в папке с документами, вы можете просто добавить GET обработчик в GCDWebServer для обслуживания содержимого всей папки документов:

 [webServer addGETHandlerForBasePath:@"/" directoryPath:<PATH_TO_DOCUMENTS_DIRECTORY> indexFilename:nil cacheAge:3600 allowRangeRequests:YES]; 

Однако это не очень хорошее решение, так как оно требует копирования фотографий из библиотеки ресурсов в папку документов, что является расточительным. Вместо этого рассмотрите возможность динамического обслуживания фотоисточников, как я объясню в своем ответе на соответствующий вопрос здесь: https://stackoverflow.com/a/31778726/463432 .

Вы можете создать один GET который вернет все пользовательские URL-адреса фотоактивных ресурсов.

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

В пользовательском обработчике URL используйте код ниже

 //Get PHAsset image name with extionsion. let filename = NSURL(string: (asset as! PHAsset).originalFilename!) // Retrive image data from PHAsset object PHImageManager.default().requestImageData(for: asset as! PHAsset, options: nil, resultHandler: { (imageData, str, nil, info) in //Check imageData is nil or not. if (imageData) { //Return image Data with contentType let imageDatas = UIImagePNGRepresentation(imageData) completionBlock!(GCDWebServerDataResponse(data: imageDatas, contentType: "image/\((filename?.pathExtension)!)")) } else { // Image retrive error message return. let jsonResponse = ["type":"failed","Message":"Image not avilable."] as [String : Any] completionBlock!(GCDWebServerDataResponse(jsonObject: jsonResponse)) } }) // MARK:- Get File name from PHAsset. extension PHAsset { var originalFilename: String? { var fname:String? if #available(iOS 9.0, *) { let resources = PHAssetResource.assetResources(for: self) if let resource = resources.first { fname = resource.originalFilename } } if fname == nil { // this is an undocumented workaround that works as of iOS 9.1 fname = self.value(forKey: "filename") as? String } return fname } } 
  • Как использовать кнопки на экране блокировки с аудиоплеером?
  • NSAttributedString freeze UITableView
  • Google API Client GTMHTTPUploadFetcher дублируется
  • Модальный переход, навигационная панель исчезает
  • Отключить вращение UIViewController в iOS 8
  • reactiveecocoa true shouldChangeCharactersInRange эквивалент текстового поля
  • Вызовите исключение из App Transport Security?
  • Могу ли я подключить несколько объектов с разными тегами к одному и тому же IBOutlet?
  • IOS 7 CollectionViewFlowLayout 3D-перевод (например, новый Safari Tabviewer)
  • Поток по-прежнему работает в старом виде
  • Как мне сделать AFNetworking «responseObject», что я получаю NSDictionary, который я могу проанализировать?
  • Interesting Posts

    Google + login Отключение приложения iOS из AppStore с помощью google sdk v3.x

    Изменение ориентации программно не работает нормально

    Привязка Monotouch не принимает модель делегата

    Черный экран с UIViewControllerAnimatedTransitioning

    Ограничить выбранные даты в исходном датпикере в приложении iOS Phonegap

    Ввод в один UITextField приводит к невозможности ввода любого другого UITextField с помощью UIViewController, UIScrollView и AutoLayouts

    NavigationBar не отображает определение, когда pushViewController

    Как получить уведомление, когда UIView отключен от своего супервизора?

    обновить профиль Provisioning для push-уведомлений

    Изменение шрифта программно в System Semibold

    Остановка или воспроизведение AVAudioPlayer из другого класса – сбой приложений – Swift

    EXC_BAD_ACCESS на iOS 6, но не 5 при изменении байтов CFDataRef

    Xcode – внедрить одну статическую библиотеку внутри другой?

    Цвет изображений Xcode + PDF выглядит темнее в симуляторе / устройстве (проблема цветового пространства)

    Почему я не могу использовать ландшафтную ориентацию при использовании UINavigationController?

    Давайте будем гением компьютера.