GCDWebServer - 来自文档的静态文件
GCDWebServer - Static files from Documents
我正在使用 GCDWebServer 在我的设备上创建一个 HTTP 服务器。
网页的实际内容放在我的应用程序的文档文件夹中。
内容包含一个 HTML 文件以及一个引用 css 和 png 文件。问题是 css 和 png
文件不是 accessible/usable 来自服务器(我只能看到 HTML 文本内容)。
相关代码:
self.server = [[GCDWebServer alloc] init];
NSString *documents = [[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject] absoluteString];
documents = [documents stringByAppendingPathComponent:@"MyWebsite"];
[self.server addGETHandlerForBasePath:@"/" directoryPath:documents indexFilename:nil cacheAge:0 allowRangeRequests:YES];
__weak typeof(self) weakSelf = self;
[_server addDefaultHandlerForMethod:@"GET" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest *request) {
if ([[request path] isEqualToString:@"/status"]) {
return [GCDWebServerDataResponse responseWithText:@"RUNNING"];
}
else if ([[request path] isEqualToString:@"/"]) {
NSString *filePath = [documents stringByAppendingPathComponent:@"mypage.html"];
NSString *html = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
return [GCDWebServerDataResponse responseWithHTML:html];
}
return nil;
}];
[self.server startWithOptions:@{GCDWebServerOption_Port: @(80)} error:&error];
谢谢!
我找到了解决方案:
用 server addGETHandlerForBasePath
添加处理程序然后 server addDefaultHandlerForMethod:
似乎是错误的。
我必须进行以下更改:
addGETHandlerForBasePath:
// using `absoluteString` is adding "file://" in front of the path. This seems to be wrong. The following code will create a correct path string.
const char *path = [[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject] fileSystemRepresentation];
NSString *documents = [[NSFileManager defaultManager] stringWithFileSystemRepresentation:path length:strlen(path)];
// full path to the HTML file
NSString *htmlFile = [documents stringByAppendingPathComponent:...];
// "directoryPath" has to be the path to folder with the (main) HTML, not the subfolder of the files. I have a separate folder only for the static files. GCDWebServer will search for the files by it's self - recursive.
[self.server addGETHandlerForBasePath:@"/" directoryPath: documents indexFilename:htmlFile cacheAge:0 allowRangeRequests:YES];
添加其他 GET 处理程序:
我必须使用 addHandler...
方法。
[self.server addHandlerForMethod:@"GET" path:@"/status" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest *request) {
// ... same implementation as in the question
}];
我正在使用 GCDWebServer 在我的设备上创建一个 HTTP 服务器。 网页的实际内容放在我的应用程序的文档文件夹中。 内容包含一个 HTML 文件以及一个引用 css 和 png 文件。问题是 css 和 png 文件不是 accessible/usable 来自服务器(我只能看到 HTML 文本内容)。
相关代码:
self.server = [[GCDWebServer alloc] init];
NSString *documents = [[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject] absoluteString];
documents = [documents stringByAppendingPathComponent:@"MyWebsite"];
[self.server addGETHandlerForBasePath:@"/" directoryPath:documents indexFilename:nil cacheAge:0 allowRangeRequests:YES];
__weak typeof(self) weakSelf = self;
[_server addDefaultHandlerForMethod:@"GET" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest *request) {
if ([[request path] isEqualToString:@"/status"]) {
return [GCDWebServerDataResponse responseWithText:@"RUNNING"];
}
else if ([[request path] isEqualToString:@"/"]) {
NSString *filePath = [documents stringByAppendingPathComponent:@"mypage.html"];
NSString *html = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
return [GCDWebServerDataResponse responseWithHTML:html];
}
return nil;
}];
[self.server startWithOptions:@{GCDWebServerOption_Port: @(80)} error:&error];
谢谢!
我找到了解决方案:
用 server addGETHandlerForBasePath
添加处理程序然后 server addDefaultHandlerForMethod:
似乎是错误的。
我必须进行以下更改:
addGETHandlerForBasePath:
// using `absoluteString` is adding "file://" in front of the path. This seems to be wrong. The following code will create a correct path string.
const char *path = [[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject] fileSystemRepresentation];
NSString *documents = [[NSFileManager defaultManager] stringWithFileSystemRepresentation:path length:strlen(path)];
// full path to the HTML file
NSString *htmlFile = [documents stringByAppendingPathComponent:...];
// "directoryPath" has to be the path to folder with the (main) HTML, not the subfolder of the files. I have a separate folder only for the static files. GCDWebServer will search for the files by it's self - recursive.
[self.server addGETHandlerForBasePath:@"/" directoryPath: documents indexFilename:htmlFile cacheAge:0 allowRangeRequests:YES];
添加其他 GET 处理程序:
我必须使用 addHandler...
方法。
[self.server addHandlerForMethod:@"GET" path:@"/status" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest *request) {
// ... same implementation as in the question
}];