由于 ASIHTTPRequest 已被放弃,我将一个 ios/osx 项目转移到使用 AFNetworking 2.0。我为 AFHTTPRequestOperationManager 编写了一个类别,该类别添加了一种创建 Amazon S3 PUT 请求的方法。它处理所有的签名等。这很好。但是,我正在上传的图像遇到问题。文件已成功上传到 S3,但未被识别为有效图像 (jpg) 文件。他们在photoshop中打开很好(它必须是宽容的)但没有别的。对文件的一些挖掘(运行 cat )表明结束边界正在被编码到文件中
--Boundary+0xAbCdEfGbOuNdArY--
我仔细检查了 HTTP 头文件,它们看起来正确:
"Accept-Language" = "en;q=1, fr;q=0.9, de;q=0.8, zh-Hans;q=0.7, zh-Hant;q=0.6, ja;q=0.5";
Authorization = "AWS REDACTED";
"Content-Length" = 228941;
"Content-Type" = "multipart/form-data; boundary=Boundary+0xAbCdEfGbOuNdArY";
Date = "Wed, 30 Oct 2013 18:57:39 +0000";
我正在使用以下方法构建请求:
NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@"PUT" URLString:url.absoluteString parameters:parameters constructingBodyWithBlock:block];
构造块如下所示:
__weak UploadPhotoAFS3Op *weakSelf = self;
self.constructingBodyBlock = ^(id<AFMultipartFormData> formData) {
UploadPhotoAFS3Op *strongSelf = weakSelf;
if (strongSelf) {
[formData appendPartWithFileData:resizedPhotoData name:@"image" fileName:strongSelf->_photoToUpload.uuidFileName mimeType:@"image/jpeg"];
}
};
我确信 resizedPhotoData 是有效的——它的生成方式与当前工作的基于 ASIHTTPRequest 的操作相同。这个问题与标题(特别是边界)有关 - 我不知所措。