在Xamarin iOS Native下载Zip文件

时间:2017-08-21 05:11:29

标签: ios xamarin.ios

我必须在Xamarin iOS下载一个Zip文件。 网址 - https://osdn.net/projects/sfnet_fotohound/downloads/sample-pictures/Sample/Sample-Pictures.zip/

只要我点击此URL,就应该开始下载,并将其保存在文档目录的特定文件夹中。

我应该如何在Xamarin Native iOS中实现相同的功能。

1 个答案:

答案 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。