Tôi có một thư mục trên máy chủ từ xa có một vài tệp .png trong đó. Tôi muốn tải xuống các ứng dụng này từ bên trong ứng dụng của mình và lưu trữ chúng trong thư mục Documents 'của ứng dụng. Tôi có thể làm cái này như thế nào?Cách tải xuống tệp từ internet và lưu trong 'Tài liệu' trên iPhone?
Trả lời
Cách dễ dàng là sử dụng các phương pháp tiện lợi của NSData initWithContentOfURL:
và writeToFile:atomically:
để lấy dữ liệu và viết ra tương ứng. Hãy ghi nhớ điều này là đồng bộ và sẽ chặn bất kỳ chủ đề bạn thực hiện nó cho đến khi lấy và viết hoàn tất.
Ví dụ:
// Create and escape the URL for the fetch
NSString *URLString = @"http://example.com/example.png";
NSURL *URL = [NSURL URLWithString:
[URLString stringByAddingPercentEscapesUsingEncoding:
NSASCIIStringEncoding]];
// Do the fetch - blocks!
NSData *imageData = [NSData dataWithContentsOfURL:URL];
if(imageData == nil) {
// Error - handle appropriately
}
// Do the write
NSString *filePath = [[self documentsDirectory]
stringByAppendingPathComponent:@"image.png"];
[imageData writeToFile:filePath atomically:YES];
Trường hợp phương pháp documentsDirectory
bị đánh cắp trắng trợn từ this question:
- (NSString *)documentsDirectory {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
return [paths objectAtIndex:0];
}
Tuy nhiên, trừ khi bạn có ý định cho chủ đề đó cho mình này sẽ ngừng hoạt động giao diện người dùng trong lúc tải file. Thay vào đó, bạn có thể muốn nhìn vào NSURLConnection và ủy nhiệm của nó - nó tải xuống dưới nền và thông báo cho một đại biểu về dữ liệu được tải xuống một cách không đồng bộ, vì vậy bạn có thể xây dựng một thể hiện của NSMutableData sau đó chỉ ghi nó ra khi kết nối được thực hiện. ủy quyền của bạn có thể chứa các phương pháp như:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
// Append the data to some preexisting @property NSMutableData *dataAccumulator;
[self.dataAccumulator appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// Do the write
NSString *filePath = [[self documentsDirectory]
stringByAppendingPathComponent:@"image.png"];
[imageData writeToFile:filePath atomically:YES];
}
Các chi tiết nhỏ, như tuyên bố dataAccumulator
và xử lý sai sót, để lại cho người đọc :)
Các tài liệu quan trọng:
- 1. Tải xuống Tài liệu/PDF từ internet và lưu vào bộ nhớ trong
- 2. cách tải xuống tệp từ url và lưu trữ trong thư mục tài liệu
- 3. Cách tải xuống tệp và lưu tệp vào thư mục tài liệu bằng AFNetworking?
- 4. Tải xuống tệp từ internet bằng java: Cách xác thực?
- 5. Cách tải xuống tệp văn bản với iPhone SDK?
- 6. Tải xuống và lưu tệp trong JMeter
- 7. Tải xuống tệp từ Internet trong khi có thể hủy tải xuống bất kỳ lúc nào
- 8. Làm cách nào để tải xuống tệp từ URL và lưu tệp trong Rails?
- 9. Android: các tệp tải xuống được lưu ở đâu?
- 10. tải xuống mã mẫu iphone từ apple
- 11. Cách tải xuống tệp từ Google Drive
- 12. tải hình ảnh từ thư mục tài liệu trong iPhone
- 13. AFNetworking - lưu tệp đã tải xuống
- 14. tải xuống nền đồng thời trên iphone
- 15. Tải xuống một tệp lớn - iPhone SDK
- 16. iPhone UIWebview - Lưu hình ảnh đã được tải xuống
- 17. iPhone dev: tải tệp từ thư mục tài nguyên
- 18. Cách lưu và tải đường vẽ iphone SDK
- 19. Tải xuống tệp từ DataURL trong JavaScript
- 20. Cách tạm dừng/tiếp tục tải xuống trong iPhone (iOS)
- 21. Lưu trữ tài liệu từ
- 22. Cách đọc tệp văn bản từ tài nguyên Internet?
- 23. curl tải tệp từ xa và tải xuống cùng lúc
- 24. Tải xuống tài nguyên trong Google Chrome Extension
- 25. Làm cách nào để tải xuống tệp bằng VBA (Không có trình duyệt internet)
- 26. Android: xử lý ngắt kết nối internet bất ngờ trong khi tải xuống dữ liệu
- 27. Sao lưu cơ sở dữ liệu mysql và tải xuống dưới dạng tệp
- 28. cách tải xuống tệp trong java?
- 29. Tệp "Untar" trên iPhone
- 30. iPhone SDK: Làm cách nào để bạn tải xuống các tệp video vào Thư mục tài liệu và sau đó phát chúng?
Cảm ơn ! Ummm ... Đồng bộ? Điều này có nghĩa là tôi đã sử dụng tốt hơn "bánh xe/thanh tiến trình" trong khi công việc đang được thực hiện? – RexOnRoids
Đồng bộ nghĩa là tất cả hoạt động trong chương trình của bạn (tốt, chủ đề chính) sẽ dừng hoàn toàn cho đến khi quá trình tải xuống hoàn tất. Điều này có nghĩa là giao diện người dùng sẽ bị đóng băng cho người dùng và người quay phim thậm chí sẽ không bắt đầu hoạt ảnh cho đến khi quá trình tải xuống hoàn tất (hiển thị chúng hoàn toàn vô ích). Phương pháp thứ hai, tải xuống không đồng bộ, cho phép chương trình của bạn tiếp tục hoạt động ở nền trước trong khi tải xuống dưới nền. Dù bằng cách nào, có, bạn nên sử dụng một số loại chỉ số tiến bộ. – Tim