我必须在Xamarin iOS下载一个Zip文件。
网址 - https://osdn.net/projects/sfnet_fotohound/downloads/sample-pictures/Sample/Sample-Pictures.zip/
只要我点击此URL,就应该开始下载,并将其保存在文档目录的特定文件夹中。
我应该如何在Xamarin Native iOS中实现相同的功能。
答案 0 :(得分:2)
您可以使用 NSURLSession 下载zip文件。
首先,您应该找到此下载站点的真实下载链接。 您可以参考this。
在Chrome中 - 正常运行下载 - 然后转到菜单 - 下载 - 您应该会看到使用的直接链接。
实际,您的文件链接为https://mirrors.netix.net/sourceforge/f/fo/fotohound/sample-pictures/Sample/Sample-Pictures.zip
。
现在开始编码。 通过NSURLSession 创建下载任务:
public void downloadTask()
{
// Your file link.
NSUrl url = NSUrl.FromString("https://mirrors.netix.net/sourceforge/f/fo/fotohound/sample-pictures/Sample/Sample-Pictures.zip");
// Configure your download session.
var config = NSUrlSessionConfiguration.DefaultSessionConfiguration;
NSUrlSession session = NSUrlSession.FromConfiguration(config, new SimpleSessionDelegate(), new NSOperationQueue());
var downloadTask = session.CreateDownloadTask(NSUrlRequest.FromUrl(url));
// Start the session.
downloadTask.Resume();
Console.WriteLine("Start DownloadTask!!!");
}
配置回调 DidFinishDownloading
:
class SimpleSessionDelegate : NSUrlSessionDownloadDelegate
{
public override void DidFinishDownloading(NSUrlSession session, NSUrlSessionDownloadTask downloadTask, NSUrl location)
{
// Configure your destination path. Here's saved to /Documents/ folder.
var documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var destinationPath = Path.Combine(documents, "Sample.zip");
if (File.Exists(location.Path))
{
NSFileManager fileManager = NSFileManager.DefaultManager;
NSError error;
// Remove the same name file in destination path.
fileManager.Remove(destinationPath, out error);
// Copy the file from the tmp directory to your destination path. The tmp file will be removed when this delegate finishes.
bool success = fileManager.Copy(location.Path, destinationPath, out error);
if (!success)
{
Console.WriteLine("Error during the copy: {0}", error.LocalizedDescription);
}
}
}
}
现在文件已保存在文档目录中并命名为Sample.zip。