Tôi cũng gặp sự cố này trước, tôi kiểm tra tiêu đề và so sánh Nội dung có độ dài với dữ liệu hoàn tất tải xuống.
Trong trường hợp máy chủ web hoạt động bình thường và có thể trả lời đúng cho Nội dung dài, bạn có thể sử dụng nó để kiểm tra dữ liệu.
Dưới đây là một đoạn để tải về chỉ tiêu đề của yêu cầu:
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL:url] autorelease];
request.HTTPMethod = @"HEAD";
NSHTTPURLResponse *response;
[NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:nil];
if ([response respondsToSelector:@selector(allHeaderFields)]) {
NSDictionary header = [response allHeaderFields];
NSString *rawContentLength = [header objectForKey:@"Content-Length"];
NSNumber *contentLength = [NSNumber numberWithInt:[rawContentLength intValue]];
// Convert contentLength to NSUInteger and use to compare with you NSData length.
}
bạn cũng có thể sử dụng nó với NSHTTPURLResponse bạn sử dụng để tải về hình ảnh để lưu yêu cầu HTTP.
Tiếp theo là lấy độ dài của NSData. Bạn có thể sử dụng phương pháp:
NSUInteger dataLength = [downloadedData length];
Sau đó so sánh cả hai giá trị, nếu hai chiều dài bằng nhau, nó tải xuống hoàn tất, bạn sẽ cần phải tải xuống lại.
Bạn cũng có thể kiểm tra xem hình ảnh có bị hỏng hay không bằng cách đọc tiêu đề Loại nội dung và kiểm tra một số byte đầu tiên và cuối cùng của dữ liệu.
Đối với PNG How to check if downloaded PNG image is corrupt? Đừng quên truyền "byte" sang "char", bạn sẽ thấy cảnh báo.
Đối với JPEG Catching error: Corrupt JPEG data: premature end of data segment
Hy vọng điều này có thể giúp bạn. :)
Có thể là lỗi Parse – Alistra
Cũng tự hỏi về điều này, có vấn đề trong đó một nửa hình ảnh sẽ tải xuống do đó nửa dưới sẽ có màu đen. Hoặc hình ảnh sẽ trông giống như nó có một bộ lọc màu vàng lạ trên đó. Gặp phải vấn đề này trên Parse 1.7.5 – Drenguin