如何在下载图像后立即打开图像

时间:2019-08-06 04:56:59

标签: xamarin.forms domdocument

我正在为Android和iOS应用程序使用xamarin.forms。在这里,我可以通过为应用程序创建个人文件夹来保存图像和文档。但是要求是下载图像/文档后,它应该自动打开,而无需手动进入该文件夹。对于Android和iOS,该怎么做。

保存图像/文档 对于Android:

  byte[] respuesta = Android.Util.Base64.Decode(fileBytes, Android.Util.Base64.Default);

                System.IO.File.WriteAllBytes(fileFullPath, respuesta);   

在iOS中:

if (extension.ToLower() == ".pdf")
            {

                byte[] encodedDataAsBytes = DecodeUrlBase64(DataString);

                string documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);

                string finalPath = Path.Combine(documentsPath, Path.GetFileName(fileFullPath));

                File.WriteAllBytes(finalPath, encodedDataAsBytes);
            }

            if(extension.ToLower() == ".png" || extension.ToLower() == ".jpg" || extension.ToLower() == ".jpeg" || extension.ToLower() == ".gif")
            {
                byte[] encodedDataAsBytes = System.Convert.FromBase64String(DataString);

                NSData data = NSData.FromArray(encodedDataAsBytes);

                var someImage= UIImage.LoadFromData(data);

                someImage.SaveToPhotosAlbum((image, error) =>
                {
                    var o = image as UIImage;
                    Console.WriteLine("error: " + error);
                });
            }

2 个答案:

答案 0 :(得分:1)

在Android中:首先,您必须从存储在Android设备专用文件夹中的文件路径中获取文件。

File file = new File(getFilesDir().getAbsolutePath(), "fileName.png");

然后使用它,您已将其转换为如下所示的URI路径。

Uri contentUri = FileProvider.getUriForFile(DownloadShareActivity.this, SHARED_PROVIDER_AUTHORITY, file);

答案 1 :(得分:0)

您可以使用DependencyService获取一个字节数组,以将其显示在图像控件中,如下所示:

在您的核心项目中:

public interface IGetBytesImagesService
{
    byte[] GetBytes(string path);
}

在您的Android项目中:

[assembly: Dependency(typeof(GetBytesImagesService))]
public class GetBytesImagesService : IGetBytesImagesService
{
    public async byte[] GetBytes(string path)
    {
         return File.ReadAllBytes(filePath);;
    }
}

在您的iOS项目中:

[assembly: Dependency(typeof(GetBytesImagesService))]
public class GetBytesImagesService : IGetBytesImagesService
{
    public async byte[] GetBytes()
    {
         return File.ReadAllBytes(filePath);
    }
}

现在,在您的xaml.cs文件中,您可以将字节数组设置为Image.Source,如下所示:

var stream = new MemoryStream(DependencyService.Get<IGetBytesImagesService>().GetBytes(filePath));
yourImage.Source = ImageSource.FromStream(() => stream);