xamarin - Xamarin iOS 中的下载路径

标签 xamarin xamarin.forms xamarin.ios xamarin-studio

我正在使用 Xamarin.Forms 并编写了下载 iOS 文件的代码 平台。正在成功下载文件,没有任何错误。但下载后,我在我的苹果设备中找不到下载的文件。

在调试过程中我发现它显示

/var/mobile/Containers/Data/Application/1234567A-B8CD-9EF9-C850-9G73587DC7C/Documents/XF_Downloads/hausmann_abcd.jpg

路径。那么文件保存在哪个位置?下面是相同的图像。

enter image description here

我为此编写了以下代码

public class IosDownloader : IDownloader
{
    public event EventHandler<DownloadEventArgs> OnFileDownloaded;

    public void DownloadFile(string url, string folder)
    {
        string pathToNewFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), folder);
        Directory.CreateDirectory(pathToNewFolder);

        try
        {
            WebClient webClient = new WebClient();
            webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
            string pathToNewFile = Path.Combine(pathToNewFolder, Path.GetFileName(url));
            webClient.DownloadFileAsync(new Uri(url), pathToNewFile);
        }
        catch (Exception ex)
        {
            if (OnFileDownloaded != null)
                OnFileDownloaded.Invoke(this, new DownloadEventArgs(false));
        }
    }

    private void Completed(object sender, AsyncCompletedEventArgs e)
    {
        if (e.Error != null)
        {
            if (OnFileDownloaded != null)
                OnFileDownloaded.Invoke(this, new DownloadEventArgs(false));
        }
        else
        {
            if (OnFileDownloaded != null)
                OnFileDownloaded.Invoke(this, new DownloadEventArgs(true));
        }
    }
}

最佳答案

当文件保存在应用程序上时,它是应用程序沙箱中的临时 URL。为了使该图像文件可以通过Apple的Photos公开访问,您必须使用 native 代码来执行添加新 PHImageAsset 的请求。到照片库。

在表单中,您需要访问 native 框架并因此运行 native 代码。如果您还不知道如何操作,网上有很多执行此操作的示例。但如果您想在共享代码框架内运行 native 代码,这里有一个介绍。 https://learn.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/dependency-service/introduction

以下是获取该临时文件 URL 并将其保存到 Photos 的示例。一旦您可以使用原生代码编写框架 Xamarin.iOS框架:

    public void AddImageUrlToPhotosLibrary(string urlToSaveToPhotos)
    {
        PHPhotoLibrary.SharedPhotoLibrary.PerformChanges(() => {

            //This is bound to native https://developer.apple.com/documentation/photokit/phassetchangerequest/1624060-creationrequestforasset
            //Parameter is an NSURL of path to image.
            PHAssetChangeRequest.FromImage(new NSUrl(urlToSaveToPhotos));

        }, (completed, error) => {

            if (completed)
            {
                if (error != null)
                {
                    Console.WriteLine($"Failed saving image asset {error.LocalizedDescription}");
                } else
                {
                    Console.WriteLine($"Successfully saved image to photos library.");
                }
            }
        });
    }

关于xamarin - Xamarin iOS 中的下载路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59578515/

相关文章:

c# - 检测用户跳到 AVPlayer 视频的结尾

ssl - 访问 XamarinForms 中的自签名 X509 证书,用于与 Mosquitto 代理的 mqtt TLS 连接

xamarin - 有没有办法让标签从左到右填充空间?

ios - 升级后MonoTouch链接库编译问题

ios - 某些 UIViewController 中的 XAMARIN.IOS UITabBarController

c# - 从 JSON 数组中提取头发颜色

android - 在 Android 上,什么决定了用于构建的 abi

c# - 为什么我的 ListView 看起来是空的?

c# - 在 Xamarin MAC 应用程序中检测 Wifi SSID

xamarin - Xamarin iOS 中的自定义振动