【问题标题】:Upload image to server ios上传图片到服务器ios
【发布时间】:2015-10-12 06:20:04
【问题描述】:

我想要做的是在 post 方法中将图像和文本发送到我的数据库

- (void)uploadpic
{
    NSData *imageData = UIImageJPEGRepresentation(self.imageview.image, 90);
    //   NSString *action=@"tempinsert";

    NSString *s=@"54.316130";
    NSString *s2=@"9.950930";
    NSString *facebook=@"12345";
    NSString *cate=@"1";

    NSString *action=@"insert";

    NSString *note=@"Iiiiiii";


    NSString *str=[NSString stringWithFormat:@"my url.php"];
    NSString *urlString = [NSString stringWithFormat:@"%@",str];

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:urlString]];
    [request setHTTPMethod:@"POST"];
    NSMutableData *body = [NSMutableData data];
    NSString *boundary = @"---------------------------14737809831466499882746641449";
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"];

    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[@"Content-Disposition: form-data; name=\"uploaded_file\"; filename=\"popup1.jpg\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

    [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[NSData dataWithData:imageData]];
    [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

    //  parameter username

    //    "lat=%@&long=%@&sdkuserid=%@&cat=%@&action=%@"]; My parameters


    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"sdkuserid\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];

    [body appendData:[facebook dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];


    //  parameter token
    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"insert\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];

    [body appendData:[action dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];


    // parameter method
    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"cat\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];

    [body appendData:[cate dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];


    //parameter method

    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"long\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];

    [body appendData:[s2 dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

    // close form
    [body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];


    // setting the body of the post to the reqeust
    [request setHTTPBody:body];


    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    // NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
    NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:returnData options:NSJSONReadingMutableLeaves error:nil];
    //
    NSLog(@" -------   >%@",returnData);
    NSLog(@" -------   >%@",dict);
}

输出

  take photo[1295:31484]  -------   ><0d0a0d0a 0d0a0d0a>
  take photo[1295:31484]  -------   >(null)

我的输出始终为空。我正在尝试将图像和少量文本发送到服务器。尽管我没有任何此类验证 firld 不能为空,所以我尝试使用更少的数据。但我每次都得到空值。

【问题讨论】:

  • 检查您的服务器日志并将错误处理添加到您的代码中
  • 尝试上传图片内容类型[@"Content-Type: image/png\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]
  • 您是否希望从上传 API 返回任何数据?我认为状态码 200 足以确认上传。获取 NSURLResponse 并检查服务器响应的状态。
  • @sandeep nag 我的建议是请将图片转换成base64 字符串然后发送到服务器,服务器逻辑可以将字符串转换为图片,反之亦然。
  • 试试这个链接来获取文件并使用它。我已经使用这个文件上传了图片gist.github.com/igaiga/1354221

标签: ios objective-c json uiimageview http-post


【解决方案1】:
//Make sure you are sending a valid Base64 image data.    
NSData *data = UIImageJPEGRepresentation(imageToSend,1);
    NSString *imageData = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

//Make a request
dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            NSError *error;
            NSData *imageJsonData = [NSJSONSerialization dataWithJSONObject:dictionaryWithImageDataStringAndSomeText
                                                                    options:NSJSONWritingPrettyPrinted
                                                                      error:&error];
            NSString *urlString = yourImageUploadUrlToSomeServer;
            NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
            [request setURL:[NSURL URLWithString:urlString]];
            [request setHTTPMethod:@"POST"];
            [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
            [request setValue:[NSString stringWithFormat:@"%lu",(unsigned long)imageJsonData.length] forHTTPHeaderField:@"Content-Length"];
            [request setHTTPBody:imageJsonData];

            NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
            NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

            NSLog(@"Image upload response: %@",returnString);
        });

//At your server decode back your image data, if you're using java do something like this:
byte[] data = Base64.decode(imageData);
InputStream in = new ByteArrayInputStream(data);
BufferedImage bi = ImageIO.read(in);
ImageIO.write(bi, "jpg", new File(to/some/path))

【讨论】:

  • 我不想转换成base64
猜你喜欢
  • 2014-01-10
  • 1970-01-01
  • 1970-01-01
  • 2013-12-20
  • 1970-01-01
  • 2012-10-10
  • 2011-06-01
相关资源
最近更新 更多