如何使用字典iOS在服务器上发布图像?

如何使用字典iOS在服务器上发布图像?,ios,objective-c,uiimage,http-post,nsdictionary,Ios,Objective C,Uiimage,Http Post,Nsdictionary,我有一些键/值的字典(dict),还有一张图像。现在我想上传图像到服务器与字典。我已经试过了,但没有成功。这是我的示例代码-- 我需要帮助我哪里出了问题。。提前感谢您的代码看起来不错,但我认为您必须将字典转换为json字符串。只要换掉这条线- [body appendData:[[NSString stringWithFormat:@"%@",dict] dataUsingEncoding:NSUTF8StringEncoding]]; 与 这可能会对您有所帮助。请尝试以下代码: -(

我有一些键/值的
字典(dict)
,还有一张
图像
。现在我想上传图像到服务器与字典。我已经试过了,但没有成功。这是我的示例代码--


我需要帮助我哪里出了问题。。提前感谢

您的代码看起来不错,但我认为您必须将字典转换为
json字符串
。只要换掉这条线-

[body appendData:[[NSString stringWithFormat:@"%@",dict] dataUsingEncoding:NSUTF8StringEncoding]];


这可能会对您有所帮助。

请尝试以下代码:

    -(void)uploadImage:(NSString *)api :(NSDictionary *)params : (UIImage *)image {

    NSURL *myURL = [NSURL URLWithString:api];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:myURL];
    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    NSString *boundary = @"---------------------------14737809831466499882746641449";
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@; charset=UTF-8", boundary];
    [request addValue:contentType forHTTPHeaderField:@"Content-Type"];
    NSMutableData *theBodyData = [NSMutableData data];
    for (int i=0; i<[[params allKeys] count]; i++)
    {
        [theBodyData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
        NSString *value=@"";
        value=[params objectForKey:[[params allKeys] objectAtIndex:i]];
        NSString * value1=[NSString stringWithFormat:@"Content-Disposition: form-data; name=%@\r\n\r\n%@\r\n",[[params allKeys] objectAtIndex:i],value];
        [theBodyData appendData:[value1 dataUsingEncoding:NSUTF8StringEncoding]];
    }

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

    [theBodyData appendData:[@"Content-Disposition: form-data; name=\"my_file1\"; filename=\"image1.jpeg\"\r\n" dataUsingEncoding:NSASCIIStringEncoding]];

    [theBodyData appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSASCIIStringEncoding]];
    NSData *myData = UIImageJPEGRepresentation(image,0.5);
    [theBodyData appendData:[NSData dataWithData:myData]];

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



    [request setHTTPBody:theBodyData];
    [request setValue:contentType forHTTPHeaderField: @"Content-Type"];
    [request setValue:[NSString stringWithFormat:@"%d", (int)[theBodyData length]] forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody: theBodyData];

    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:config];

    NSURLSessionDataTask * dataTask =[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        if(error == nil) {
            NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"Server Raw Response : %@",responseString);
        }

    }];

    [dataTask resume];


}
-(void)uploadImage:(NSString*)api:(NSDictionary*)参数:(UIImage*)图像{
NSURL*myURL=[NSURL-URLWithString:api];
NSMutableURLRequest*请求=[[NSMutableURLRequest alloc]initWithURL:myURL];
[请求设置HttpMethod:@“POST”];
[请求设置值:@“应用程序/json”用于HttpHeaderField:@“接受”];
NSString*boundary=@“------------------------------------14737809831466499882746641449”;
NSString*contentType=[NSString stringWithFormat:@“多部分/表单数据;边界=%@;字符集=UTF-8”,边界];
[请求addValue:contentType for HttpHeaderField:@“内容类型”];
NSMutableData*主体数据=[NSMutableData];
对于(int i=0;iHappy to help you:)如果答案有帮助,请将其标记为已接受。这样其他用户会发现它有帮助。谢谢
NSString *jsonStr = [[NSString alloc]initWithData:[NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil] encoding:NSUTF8StringEncoding];

[body appendData:[jsonStr dataUsingEncoding:NSUTF8StringEncoding]];
    -(void)uploadImage:(NSString *)api :(NSDictionary *)params : (UIImage *)image {

    NSURL *myURL = [NSURL URLWithString:api];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:myURL];
    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    NSString *boundary = @"---------------------------14737809831466499882746641449";
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@; charset=UTF-8", boundary];
    [request addValue:contentType forHTTPHeaderField:@"Content-Type"];
    NSMutableData *theBodyData = [NSMutableData data];
    for (int i=0; i<[[params allKeys] count]; i++)
    {
        [theBodyData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
        NSString *value=@"";
        value=[params objectForKey:[[params allKeys] objectAtIndex:i]];
        NSString * value1=[NSString stringWithFormat:@"Content-Disposition: form-data; name=%@\r\n\r\n%@\r\n",[[params allKeys] objectAtIndex:i],value];
        [theBodyData appendData:[value1 dataUsingEncoding:NSUTF8StringEncoding]];
    }

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

    [theBodyData appendData:[@"Content-Disposition: form-data; name=\"my_file1\"; filename=\"image1.jpeg\"\r\n" dataUsingEncoding:NSASCIIStringEncoding]];

    [theBodyData appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSASCIIStringEncoding]];
    NSData *myData = UIImageJPEGRepresentation(image,0.5);
    [theBodyData appendData:[NSData dataWithData:myData]];

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



    [request setHTTPBody:theBodyData];
    [request setValue:contentType forHTTPHeaderField: @"Content-Type"];
    [request setValue:[NSString stringWithFormat:@"%d", (int)[theBodyData length]] forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody: theBodyData];

    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:config];

    NSURLSessionDataTask * dataTask =[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        if(error == nil) {
            NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"Server Raw Response : %@",responseString);
        }

    }];

    [dataTask resume];


}