问题描述
|
我正在尝试将图像和文本从iPhone应用程序发送到asp.net网页。
通过遵循此示例,我现在在xcode中具有以下用于上传图像的方法:
- (BOOL) uploadData {
NSData *imageData = UIImageJPEGRepresentation([serviceForm image],0.9);
NSString *urlString = @\"http://someUrl/SubmitSchema.ashx\";
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@\"POST\"];
NSString *boundary = @\"---------------------------14737809831466499882746641449\";
NSString *contentType = [NSString stringWithFormat:@\"multipart/form-data; boundary=%@\",boundary];
[request addValue:contentType forHTTPHeaderField: @\"Content-Type\"];
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@\"--%@\\r\\n\",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@\"Content-Disposition: form-data; name=\\\"userfile\\\"; filename=\\\"ipodfile.jpg\\\"\\r\\n\"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@\"Content-Type: application/octet-stream\\r\\n\\r\\n\"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:imageData]];
[body appendData:[[NSString stringWithFormat:@\"\\r\\n--%@--\\r\\n\",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
BOOL success = [returnString isEqualToString:@\"ok\"];
[returnString release];
return success;
}
在同一文章的底部,有一个关于创建asp.net通用处理程序的建议。基于此,我有以下用于保存图像的简单代码:
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = \"text/plain\";
foreach (var name in context.Request.Files.AllKeys)
{
var file = context.Request.Files.Get(name);
SaveFile(file);
}
}
private void SaveFile(HttpPostedFile file)
{
var fileName = Path.GetFileName(file.FileName);
var path = \"C:\\\\Test\\\\\" + fileName;
file.SaveAs(path);
}
这有效并且图像已保存,但是我还没有设法在同一篇文章中包含一串文本。我要发送的文本可能会很长,我想最好将其包含在发布的数据中,而不是作为查询字符串?
您如何在发布的数据中添加一些文本并在.net中阅读?
解决方法
我不是Objective-C专家,但是通过一点点Google搜索,我发现了一个讨论和一个在单个请求中发送文件和表单字段的工作示例。
在服务器上,您可以使用以下方法在另一侧再次拉出数据:
string data = Request.Form[\"name\"];
如果您遇到困难,Fiddler是嗅探HTTP请求的好工具。
,一种选择是发送具有内容类型的长字符串作为表单编码的内容,然后使用context.Request.Form获取发布的字符串的值。当您有一个大字符串时,可以将其作为\“ data = \'large string \'\\”放在一个表单值中,并且在服务器端,您可以执行context.Request.Form [\“ data \”]以获取串。
注意:您必须正确编码字符串,以便在发布之前对任何=或&进行编码