如何读取GCDWebServer POST请求的表单主体

问题描述 投票:0回答:1

我很难相信这很困难,但是花了几个小时试图弄清楚之后,我在这里向蜂巢的心寻求帮助!

我的问题与this非常相似,但是那里的答案对我没有帮助,因为我的表单中没有键。我基本上想从PC发送文本.plist文件到我的应用程序。页面上的HTML是此..

<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" id="config" name="config" accept=".plist" size=40>
<input type="submit"> 
</form>

这给出了一个非常简单的表单,带有选择的文件按钮和提交按钮。我已通过Wireshark确认该文件已附加到表单上,并且该内容已过帐到我的应用程序中的GCDWebServer。当文件上传由Web服务器处理时,我还可以看到以下确认正文数据的信息:

[[DEBUG]套接字21预检请求“ POST / upload”具有2045字节的正文的连接

[[DEBUG]套接字21处理请求“ POST / upload”具有2045字节正文时的连接

我处理文件的POST方法是这样的:

    [_webServer addHandlerForMethod:@"POST"
                          path:@"/upload"
                  requestClass:[GCDWebServerRequest class]
                   processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) {

        NSString    *type = [(GCDWebServerRequest*)request contentType];
        NSInteger  length = [(GCDWebServerRequest*)request contentLength];
        BOOL      hasBody = [(GCDWebServerRequest*)request hasBody];

    NSString *description = [(GCDWebServerURLEncodedFormRequest*)request description];

    NSLog(@"\r\nType: %@\nLength: %lu\nHas Body: %@\nHeaders: %@\nConfig: %@", type, length, hasBody?@"YES":@"NO", description, @"");

        return [GCDWebServerDataResponse responseWithHTML:@"TODO UPLOADED CONFIRMATION"];
    }];

我可以获取内容类型,内容长度,一个布尔值确认,一个附加的主体,所有标头和边界描述等。但是我一生无法弄清楚如何获取实际的主体内容。我不希望将其另存为文件,而只是希望将其另存为NSString,这样我就可以解析它,然后将设置保存在我的应用程序中。

我尝试过的几件事:

//NSData     *data = [(GCDWebServerRequest*)request data];
//NSString *config = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];

//NSString *config = [(GCDWebServerMultiPartFormRequest*)request files];
//NSString *config = [[(GCDWebServerURLEncodedFormRequest*)request arguments] objectForKey:@"filename"];

NSData对我来说似乎是最有可能的,但是调用该应用程序时它崩溃了。如果有人对我如何访问此发布内容的主体有任何想法,我将非常感谢!

提前感谢!

等离子

ios objective-c post nsdata gcdwebserver
1个回答
0
投票

您将要使用GCDWebServerMultiPartFormRequesthttps://github.com/swisspol/GCDWebServer/blob/master/Mac/main.m#L257中有一个示例。

© www.soinside.com 2019 - 2024. All rights reserved.