【问题标题】:GCDWebServer - Static files from DocumentsGCDWebServer - 来自文档的静态文件
【发布时间】:2015-09-08 03:33:56
【问题描述】:

我正在使用 GCDWebServer 在我的设备上创建一个 HTTP 服务器。 网页的实际内容放置在我的应用程序的 Documents 文件夹中。 内容包含一个带有引用的 css 和 png 文件的 HTML 文件。问题是css和png 文件无法从服务器访问/使用(我只能看到 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];

谢谢!

【问题讨论】:

    标签: ios objective-c gcdwebserver


    【解决方案1】:

    我找到了解决办法:

    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
    }];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 2016-01-01
      • 2015-07-15
      • 2010-12-18
      • 2016-04-13
      相关资源
      最近更新 更多