AFNetworking 2.2.1从Amazon S3服务器加载图像

Jam*_*tin 8 objective-c amazon-s3 ios afnetworking-2

我在尝试在Amazon S3服务器上下载图像时遇到了问题.

我收到以下错误:

Error Domain=AFNetworkingErrorDomain Code=-1016 "Request failed: unacceptable content-type: binary/octet-stream" 
Run Code Online (Sandbox Code Playgroud)

有人有想法吗?

Avt*_*Avt 16

此错误由生成

- (BOOL)validateResponse:(NSHTTPURLResponse *)response
                    data:(NSData *)data
                   error:(NSError * __autoreleasing *)error
Run Code Online (Sandbox Code Playgroud)

AFMTPResponseSerializer的方法,如果有不可思议的MIME类型的响应.

您可以通过向响应序列化程序添加必需的MIME类型来修复它

// In this sample self is inherited from AFHTTPSessionManager
self.responseSerializer = [AFImageResponseSerializer serializer];
NSSet *set = self.responseSerializer.acceptableContentTypes;
self.responseSerializer.acceptableContentTypes = [set setByAddingObject:@"binary/octet-stream"];
Run Code Online (Sandbox Code Playgroud)

或者你可以修改AFImageResponseSerializer:

- (instancetype)init {
    self = [super init];
    if (!self) {
        return nil;
    }

    self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"image/tiff", @"image/jpeg", @"image/gif", @"image/png", @"image/ico", @"image/x-icon", @"image/bmp", @"image/x-bmp", @"image/x-xbitmap", @"image/x-win-bitmap", @"binary/octet-stream", nil];

#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
    self.imageScale = [[UIScreen mainScreen] scale];
    self.automaticallyInflatesResponseImage = YES;
#endif

    return self;
}
Run Code Online (Sandbox Code Playgroud)

但问题的根源可能是您使用错误的MIME类型或根本没有类型将图像保存到Amazon.在我的代码中,我使用以下代码将图像保存到亚马逊

S3PutObjectRequest *putObjectRequest = [ [ S3PutObjectRequest alloc ] initWithKey:keyImage    inBucket:self.s3BucketName ];
putObjectRequest.contentType = @"image/jpeg";
putObjectRequest.data = UIImageJPEGRepresentation( [ image fixOrientation ], 0.5f );
putObjectRequest.cannedACL = [ S3CannedACL publicRead ];
Run Code Online (Sandbox Code Playgroud)

  • 别客气!如果答案解决了您的问题 - 请接受. (3认同)
  • 好的,感谢将@"binary/octet-stream"添加到它工作的列表中.但我同意你应该正确设置图像MIME类型.谢谢一堆. (2认同)