将图像和文字从iPhone发布到asp.net

时间:2011-05-26 09:19:50

标签: c# iphone asp.net xcode

我正在尝试将图像和文本从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中读取?

2 个答案:

答案 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”]来获取字符串。 注意:您必须正确编码字符串,以便任何=或&在发布之前进行编码