【问题标题】:Uploading image in png format with iPhone sdk使用 iPhone sdk 上传 png 格式的图像
【发布时间】:2011-07-29 20:13:48
【问题描述】:

我想将 png 格式的图像上传到服务器。我必须在请求中提供三个参数

  • transactionID: (any random integer)

  • signatureBytes:data:image/png;base64,iVBORw0KGgoAAAsdffsdfsdfsdfsdfYAAAAeGRPoAAAgAElEQVR4nO2de5BmRXnGHzWmYkKVKUqJRk0erwerrwds55/lVnT/mm+87/Z4+3f30+/YN6D9L48CMA9VxnOJ9S

  • guid: CAD1CBE7-B5A4-43d6-BCDD-89B16F97E3C4

我用过代码:

NSData *imageData = UIImageJPEGRepresentation(image.image,90);

// setting up the URL to post to


NSString *urlString=@"http://www.riverport.net/icalibur/dev/signature.ashx";

// setting up the request object now
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];

    NSString *boundary = [NSString stringWithString:@"---------------------------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--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"transactionID\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[[NSString stringWithString:@"7" intva] dataUsingEncoding:NSUTF8StringEncoding]];


  [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"signatureBytes\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"data:image/png;base64,iVBUaBCrFDXGSIECEXEFdUFEhEVAluXmsrrtrrttrrqddcsvrgergergg/YN6D9L4uozc5h+nsWsFhGSn88CWAAwqV2ynoz1qvJjYTmfCOk1QxJ0ANgHijoZDy8CMA9VxnOJ9S"] dataUsingEncoding:NSUTF8StringEncoding]];


[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"guid\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"CHJ78G-B5A4-43d6-BCDD-CFG567FGJ"] dataUsingEncoding:NSUTF8StringEncoding]];


[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"ipodfile.png\"\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]];
// setting the body of the post to the reqeust
[request setHTTPBody:body];


NSString* returns= [[NSString alloc] initWithData:body encoding:NSUTF8StringEncoding];



//NSLog(@"body %@",stri);


// now lets make the connection to the web
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

NSLog(returnString);

服务器的响应是:

[FormatException: Input string was not in a correct format.]
   Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat) +201
   Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value) +66

[InvalidCastException: Conversion from string "����

有谁知道可能是什么问题。我不知道我是否做得对。

【问题讨论】:

标签: iphone objective-c post httpwebrequest


【解决方案1】:

嗨,Pankaj 我不确定,但只尝试没有 transactionID 和 guide 参数的图像 NSData, 你的代码似乎没问题。 请告诉我结果。

【讨论】:

  • 否服务器只响应所有参数的请求
【解决方案2】:

根据您收到的错误,我认为您没有为请求正确设置参数。

您为什么不使用ASIHTTPRequest 上传您的照片?它有一个 ASIFormDataRequest 类,你可以用它来发出 POST 或 GET 请求,你可以很容易地向它添加参数。

here 是使用 ASIHTTPRequest 上传图片的示例。

【讨论】:

    【解决方案3】:

    您没有正确格式化上传数据。帖子数据应如下所示:

    --boundary
    Content-Disposition: form-data; name="foo"
    
    value-for-foo
    --boundary
    Content-Disposition: form-data; name="bar"
    
    value-for-bar
    --boundary
    Content-Disposition: form-data; name="file"; filename="filename.ext"
    Content-Type: application/whatever
    
    file data
    --boundary--
    

    注意在标题和字段值之间有一个空行(“\r\n\r\n”),值后面有一个 crlf,下一个字段的标题之前有一个重复的边界.您的代码中没有这些,您的输出看起来更像这样:

    --boundary
    Content-Disposition: form-data; name="foo"
    value-for-fooContent-Disposition: form-data; name="bar"
    value-for-barContent-Disposition: form-data; name="file"; filename="filename.ext"
    Content-Type: application/whatever
    
    file data--boundary--
    

    【讨论】:

      【解决方案4】:

      你说你想发布一个 PNG 图像,但你在你的 code-sn-p 中获取 JPEG 表示。改成UIImagePNGRepresentation解决了吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-01
        • 1970-01-01
        • 2011-08-26
        • 1970-01-01
        相关资源
        最近更新 更多