0

ユーザーが選択した画像の配列をアップロードしようとしています。それらは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 応答を取得しています。と の両方を試しましNSURLSessionDataTaskNSURLSessionUploadTask。どんな助けでもうまくいくでしょう!

4

2 に答える 2

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"
     },
      ...
  ]
}
于 2016-08-24T03:54:43.110 に答える