我正在使用ASIHTTPRequest进行多次下载。这里使用异步下载方法,因此可以执行多次下载。它工作正常。 现在我想将这些下载文件保存到应用程序的本地文件夹(在设备中),并且还想要检索它(想要获取每个文件的路径)。我怎样才能做到这一点?在这里,多个下载正在执行如何区分下载中的每个文件? 这是我用过的代码。
- (void)download{
UIImageView *image = (UIImageView *)[mainView viewWithTag:selectedTag];
for (UIProgressView *currentProgress in [image subviews]) {
if ([currentProgress isKindOfClass:[UIProgressView class]]) {
NSLog(@"Prog tag: %d",currentProgress.tag);
if(currentProgress)
{
currentProgress.progress = 0.0;
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:[urlArray objectAtIndex:selectedTag]]];
[request setDownloadProgressDelegate:currentProgress];
[request setShowAccurateProgress:YES];
[request setDownloadDestinationPath:[[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"mansory_porsche_carrera_3-1920x1200.jpg"]];
[request shouldContinueWhenAppEntersBackground];
[request allowResumeForFileDownloads];
[request startAsynchronous];
}
}
}
}
答案 0 :(得分:1)
您可以相应地修改这些功能,并可以保存您想要的任何文件。
- (NSString *)applicationDocumentsDirectory
{
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}
- (void)saveImage:(UIImage*)image:(NSString*)imageName
{
NSData *imageData = UIImagePNGRepresentation(image); //convert image into .png format.
NSFileManager *fileManager = [NSFileManager defaultManager];//create instance of NSFileManager
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //create an array and store result of our search for the documents directory in it
NSString *documentsDirectory = [paths objectAtIndex:0]; //create NSString object, that holds our exact path to the documents directory
NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", imageName]]; //add our image to the path
[fileManager createFileAtPath:fullPath contents:imageData attributes:nil]; //finally save the path (image)
NSLog(@"image saved");
}
为了检索你可以使用这些行来检查文件是否存在:
NSString *cachedImageFileUrl = [documentsDirectory stringByAppendingPathComponent:yourFileName];
NSFileManager *fileManager = [NSFileManager defaultManager];
if([fileManager fileExistsAtPath])
{
//File exists...
}
else
{
}
告诉我它是否有帮助!!!
答案 1 :(得分:1)
首先,决定是否要使用块或使用委托函数。
如果你想使用块,那么由于ASIHTTPRequest是NSOperation的子类,你可以使用-setComplectionBlock来创建一个回调,当这个特定请求下载完成后将被调用
如果要使用委托函数,则将每个请求的委托设置为所需对象(可能是您的控制器),然后在同一对象-requestFinished和-requestFailed中实现,以便您可以处理响应。 / p>
每次url下载完成后,将使用下载文件作为参数的请求调用回调。此请求具有-responseData对象,当请求完成时,将填充下载的数据。这将是您的图像数据。
这是正常且最知道的方式。现在,你似乎直接这样做,但你已经设置了每个请求写在磁盘上的同一个文件!您确定以这种方式从多个图像中获取所需数据吗?在我看来,图像数据将在下载时重叠!
以下是我要做的事情:我会下载每个图像,在下载每个图像时,我会使用回调函数重命名生成的文件。之后,从同一个回调中,我将实际文件名存储在我的控制器中的NSMutableDictionary中。像[myDict setValue:“path / to / image.png”forKey:“myImage1”]之类的东西,以便我以后可以访问它们。
<<另外,我认为你应该放弃AIHTTPRequest,因为它已经被放弃了,但是开发人员。您可以使用AFNetworking作为一个很好的选择。它还提供进度回调,并且是基于块的。如果您想要iOS 4.0之前的兼容性,请忽略最后一段。 >>