Tag: gcdwebserver

通过方法自定义GCDWebServer默认下载网页

目前,我正在开发一个简单的语音备忘录iOS应用。 一种基本功能是允许用户从任何浏览器下载其记录的备忘录。 一种方法是设置在应用程序内部运行的HTTP服务器,以提供文件下载功能。 我搜索了一些解决方案,发现GCDWebServer是iOS应用程序非常流行的轻量级HTTP服务器库。 尽管它只有Objective C版本,但可以通过CocoaPods轻松地集成到Swift项目中。 通过GCDWebUploader使用几行代码来设置HTTP服务器也非常容易: 解决方案真的可以这么简单吗? 这似乎是小菜一碟。 最初我很满意,但是后来我意识到有几个问题。 默认网页提供了基本的文件管理功能,但对于我的应用程序来说,这些功能太多了。 我只需要允许用户下载文件而无需更改其他任何内容。 因为我将语音备忘录文件信息保存在数据库中,所以如果用户可以上载文件,创建文件夹或删除或重命名文件,则会使它们与数据库中的信息不一致并破坏应用程序的功能。 我检查了源代码,发现GCDWebUploader确实有一些挂钩方法来防止它: 尽管这是一个可行的解决方案,但是显示的网页在视觉上并不是很吸引人。 对于我的语音备忘录应用程序,简单性至关重要。 我想为用户提供一个整洁的网页,并隐藏所有不必要的按钮。 由于我暂时不想修改源代码,因此,如果我可以在网页内容返回到浏览器的请求之前对其进行修改,那么它也应该起作用。 我再次检查了源代码,发现该网页的html内容是由GCDWebServerDataResponse.m中的初始方法initWithHTML:(NSString *)html返回的。 更整洁了吧? 现在,我可以安静地喝茶和编码了,而不必担心任何意外的用户修改。 由于可以替换HTML内容,因此您甚至可以根据需要将整个网页更改为自己的实现。 但是您必须充分了解源代码,并确保自己的页面能够按预期工作。 该解决方案具有其优点和缺点。 优点:它是非侵入性的,易于实施且非常灵活。 缺点:它依赖CGDWebServer的内部逻辑。 如果在将来的任何版本中修改了逻辑,则也必须修改代码。 您还必须做一些额外的工作来解析HTML。 解决该问题的最终方法也许是修改GCDWebSever的源代码,并在Github上创建请求请求,并希望作者批准该修改,但这是另一回事,可能无法及时解决您的问题。 祝好运!

JSON写入中无效的顶级types

我试图创build一个简单的JSON对象,但我仍然得到错误,我知道我的代码中有什么问题: NSString *vCard = [BRContacts getContacts]; // this is just a string, could be nil NSDictionary *JSONdic = nil; if (vCard) { JSONdic = [NSDictionary dictionaryWithObjectsAndKeys:@"1",@"status",vCard,@"data", nil]; } else { JSONdic = [NSDictionary dictionaryWithObjectsAndKeys:@"0",@"status",@"vCard is empty",@"error", nil]; } NSError *error = nil; NSData *JSONData = [NSJSONSerialization dataWithJSONObject:JSONdic options:NSJSONWritingPrettyPrinted error:&error]; return [GCDWebServerDataResponse responseWithJSONObject:JSONdata]; 例外是 JSON写入中无效的顶级types 我也检查了JSONdic […]

iOS重新路由请求w / GCDWebServer(不redirect)

我想在iOS上用GCDWebServer创build一个服务器,它将接受到localhost请求,然后从另一个url (一个video文件)中提取数据并将数据传输到响应中。 我打算使用普通的NSURLConnection ,并且在NSURLConnectioncallback的GCDWebServerResponse ,我想把这个数据传递给GCDWebServerResponse 。 我很难弄清楚如何保持连接从一个请求打开,以便我可以启动另一个请求w / NSURLConnection ,并开始提供响应的数据。 有什么办法可以做到吗? 我是否需要创build一个GCDWebServerStreamedResponse的新子类? 先谢谢你。

如何在iOS上使用embedded式HTTP服务器实现Video Seek支持?

我有一个客户端iOS应用程序,它使用GCDWebServer来提供存储在我的设备上的应用程序的NSSearchPathDirectory.DocumentDirectory文件夹中的图像和video。 在应用程序启动时,我启动了一个GCDWebServer实例并为我的请求添加一个文件响应处理程序: self.addDefaultHandlerForMethod("GET", requestClass: GCDWebServerFileRequest.self) { request in return GCDWebServerFileResponse(file: self.filePathForResponse(request.URL)) } 我可以validation,当应用程序正在运行,我可以成功地从我的设备下载文件: curl -O http://192.168.0.15:8080/files/IMG_1213-1280×720.MOV 我的应用通过向媒体渠道发送类似上述内容的url与Chromecast设备通话,Chromecast接收器应用会通过指定的url加载和播放video – 目前为止都很好。 我的问题是我想实现对当前正在播放的video的寻求支持,只要我向媒体频道发送一个search请求,就会从GCDWebServer收到一个“Broken pipe”错误,并且video播放被中断。 从服务器login如下: …. [DEBUG] Connection sent 32768 bytes on socket 24 [DEBUG] Connection sent 32768 bytes on socket 24 [ERROR] Error while writing to socket 24: Broken pipe (32) [DEBUG] Did close connection on socket […]