iOS 端使用 AFNetworking (AFN) 上傳圖片,後端(C++/Java 等)接收後解析圖片異常:畫面上半部分扭曲、下半部分全黑。嘗試用 randomAccessFile 去除前四行,不確定尾部是否需同步處理。
AFN 默認以 **multipart/form-data** 形式上傳文件,**不會自動 Base64 編碼**。若後端預期 Base64 字符串,或雙端對 Base64 變體(標準/URL Safe/MIME)理解不一致,會導致解碼後數據錯位、截斷、填充錯誤,表現為圖片局部扭曲/全黑。
NSData.base64EncodedStringWithOptions(NSDataBase64EncodingEndLineWithLineFeed)),後端用對應變體解碼(標準 RFC 4648 / URL Safe)。= 完整。iOS NSDataBase64EncodingEndLineWithLineFeed 會換行,後端需兼容。randomAccessFile 去除「前四行」屬於治標不治本,multipart 邊界、Header 長度不固定,強行截取極易破壞數據完整性。AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
[manager POST:urlString parameters:nil constructingBodyWithBlock:^(id formData) {
NSData *imageData = UIImageJPEGRepresentation(image, 0.8);
[formData appendPartWithFileData:imageData name:@"file" fileName:@"photo.jpg" mimeType:@"image/jpeg"];
} progress:nil success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"Upload success: %@", responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"Upload failed: %@", error);
}];
後端直接按 multipart 解析獲取 file 部分二進制數據即可,**無需 Base64 轉碼**,圖片異常問題迎刃而解。