在目标c中将文件上传到没有多部分的服务器?

时间:2017-02-25 07:29:26

标签: ios objective-c xcode image-uploading multipartform-data

我想将图像上传到服务器。服务器的服务是用.NET编写的。现在服务器要求我将图像作为数据字节而不是multipart发送。我正在通过下面的代码上传文件。我在上传文件时得到响应,但图片没有显示。

[request setURL:[NSURL URLWithString:url]];
          [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=\"host_pic\"; filename=\"parkN.png\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
          [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
          [body appendData:postData];
          [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];

请解释可能是什么问题。我怎样才能将这样的文件上传。

1 个答案:

答案 0 :(得分:0)

然后你可以尝试POST JSON格式。

NSError *error;

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
NSURL *url = [NSURL URLWithString:@"<YOUR SERVER>"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];

[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"];

[request setHTTPMethod:@"POST"];

UIImage *image = [UIImage imageNamed:@"image.png"];
NSString *byteArray = [UIImagePNGRepresentation(image) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

NSDictionary *mapData = [[NSDictionary alloc] initWithObjectsAndKeys: byteArray, @"host_pic",
                     @"IOS TYPE", @"typemap",
                     nil];
NSData *postData = [NSJSONSerialization dataWithJSONObject:mapData options:0 error:&error];
[request setHTTPBody:postData];


NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

}];

[postDataTask resume];