如何读取 GCDWebServer POST 请求的表单正文



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

我的问题与此问题非常相似,但是那里的答案对我没有帮助,因为我的表格中没有钥匙。我基本上想将文本 .plist 文件从 PC 发送到我的应用程序。页面上的 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 服务器处理:

[调试] 套接字 21 上的连接预检请求"POST/upload",正文为 2045 字节

[调试] 套接字 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(@"rnType: %@nLength: %lunHas 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 看起来最有可能,但调用它时应用程序崩溃。如果有人知道我如何访问此发布内容的正文,我将不胜感激!

提前感谢!

血浆

您需要使用GCDWebServerMultiPartFormRequest.https://github.com/swisspol/GCDWebServer/blob/master/Mac/main.m#L257 这里有一个例子。

最新更新