我正在尝试将图像和文本从iPhone应用程序发送到asp.net网页。
通过关注this example我现在在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中读取?
答案 0 :(得分:2)
我不是Objective-C专家,但是通过Google搜索我发现a discussion and a working example of sending a file and form fields in a single request。
在服务器上,您可以使用以下方法在另一侧再次取出数据:
string data = Request.Form["name"];
如果您遇到问题,Fiddler是嗅探HTTP请求的绝佳工具。
答案 1 :(得分:0)
一个选项是发送带有内容类型的长字符串作为表单编码内容,然后使用context.Request.Form获取发布字符串的值。因为你有一个大的字符串,它可以作为“data ='large string'”放在单个表单值中,在服务器端你可以使用context.Request.Form [“data”]来获取字符串。 注意:您必须正确编码字符串,以便任何=或&在发布之前进行编码