我正在尝试上传用户选择的图像数组。它们是base64
编码的。我从服务器得到一个null响应。这是我的代码如下。
for (PHAsset *asset in assets) {
[manager requestImageForAsset:asset targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeDefault options:self.requestOptions resultHandler:^void(UIImage *image, NSDictionary *info) {
NSString *encodeStr = [UIImagePNGRepresentation(image) base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];
[images addObject:encodeStr];
}];
}
我使用 QBImagePickerController 从委托中获取图片。我有一个NSMutableDictionary
作为NSMutableURLRequest
的正文内容。
[uploadObject setValue:@"32" forKey:@"userid"];
[uploadObject setValue:TFname.text forKey:@"Name"];
[uploadObject setObject:images forKey:@"SelectedImages"];
JSONData = [NSJSONSerialization dataWithJSONObject:uploadObject options:NSJSONWritingPrettyPrinted error:nil];
以下是NSMutableURLRequest
request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"JSON" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:JSONData];
我收到的服务器响应代码为500,服务器的响应为null。我尝试了NSURLSessionDataTask
和NSURLSessionUploadTask
。
任何帮助都会有所帮助!
答案 0 :(得分:1)
如果没有看到服务器端代码,就无法确定此代码是否正确。看起来您正在将以下内容发送到服务器:
{
"userid" : "32",
"Name": "someFilename",
"SelectedImages": [
"base64-encoded-data-of-first-image",
"base64-encoded-data-of-second-image",
...
]
}
如果您的服务器了解如何解析JSON请求主体并获取具有这些名称的字段,那么它应该可以正常工作。但是,似乎不太可能格式正确,因为您传递的是多个图像,其中包含单个文件名。
如果您使用现有的服务器代码,则需要找出它希望数据所在的格式。如果您正在编写自己的服务器代码,则应该更像这样构建数据:
{
"userid" : "32",
"SelectedImages": [
{
"name": "firstFilename",
"data": "base64-encoded-data-of-first-image"
},
{
"name": "secondFilename",
"data": "base64-encoded-data-of-second-image"
},
...
]
}
答案 1 :(得分:0)
最后我发现了这个问题。
问题在于服务器端。