如何在Objective-C中将UIImage上传到服务器?

问题描述

我的项目所做的是使用自定义相机拍摄照片并将其添加到NSMutableArray。然后,我获取这些图像并将其提交给接受图像的API。我已经尝试了在StackOverflow上找到的几乎所有解决方案,但没有一个对我有用。我使用了AFNetworking甚至是NSURLRequests的Multipart Request。

实际上有两种解决方案提交给我的API,但是文件显示为*******。amazonaws.com/2020/10/21/090522h。它不会在图片上添加扩展名,因此当我尝试将该图片重新显示在我的应用程序上时,图片就坏了。

Custom Camera View

View that Displays Image Array after Images are taken with Camera

当我使用AFNetworking解决方案按Submit后,此消息将返回,但是图像损坏。

2020-10-21 10:40:57.715622-0500 WFM App[24455:5876263] Response: {length = 8,bytes = 0x2053554343455353}
2020-10-21 10:40:57.716223-0500 WFM App[24455:5876263]  SUCCESS

这是使用 AFNetworking 的人:

    NSURL *URL = [NSURL URLWithString:url];

    NSData *imageData= UIImageJPEGRepresentation(transporterImagesArray[0],0.7);

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.requestSerializer = [AFHTTPRequestSerializer serializer];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

    [manager.requestSerializer setValue:@"multipart/form-data" forHTTPHeaderField:@"Content-Type"];

    [manager POST:URL.absoluteString parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFileData:imageData
                                    name:@"fileToUpload"
                                fileName:@"image.jpg" mimeType:@"image/jpeg"];

        // etc.
    } progress:nil success:^(NSURLSessionDataTask *task,id responseObject) {
        NSLog(@"Response: %@",responseObject);

        NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSLog(@"%@",string);

    } failure:^(NSURLSessionDataTask *task,NSError *error) {
        NSLog(@"Error: %@",error);
    }];

以下是与 NSURLRequests 一起使用的

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]];

    NSData *imageData = UIImageJPEGRepresentation(transporterImagesArray[0],0.7);

    [request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
    [request setHTTPShouldHandleCookies:NO];
    [request setTimeoutInterval:60];
    [request setHTTPMethod:@"POST"];

    NSString *boundary = @"unique-consistent-string";

    // set Content-Type in HTTP header
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    [request setValue:contentType forHTTPHeaderField: @"Content-Type"];

    // post body
    NSMutableData *body = [NSMutableData data];

    // add params (all params are strings)
    [body appendData:[[NSString stringWithFormat:@"--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=fileToUpload\r\n\r\n",@"imageCaption"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"%@\r\n",@"Some Caption"] dataUsingEncoding:NSUTF8StringEncoding]];

    // add image data
    if (imageData) {
        [body appendData:[[NSString stringWithFormat:@"--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=fileToUpload;"] dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:imageData];
        [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    }

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

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

    // set the content-length
    NSString *postLength = [NSString stringWithFormat:@"%d",[body length]];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];


    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue currentQueue] completionHandler:^(NSURLResponse *response,NSData *data,NSError *error) {
        if(data.length > 0)
        {
            NSLog(@"Success uploading Image!");

            picturesDisplayViewController *home = [self.storyboard instantiateViewControllerWithIdentifier:@"tabBarController"];
            [self.navigationController pushViewController:home animated:YES];

        }
    }];

我希望获得一些帮助或建议,我已经坚持了整整一天,我需要继续前进。谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...