【问题标题】:Xamarin forms: how to receive images without storing anywhere locally?Xamarin 表单:如何在不存储本地任何地方的情况下接收图像?
【发布时间】:2016-10-20 01:55:10
【问题描述】:

我正在开发一个应用程序,我希望用户从 Web 服务获取图像,但不希望它们本地存储在 localdb 或本地文件中。 有办法吗?

我正在使用 Xamarin 表单。但如果可以原生完成,也可以通过 xamarin 表单完成。

【问题讨论】:

  • 将它们作为字节数组/内存流传递.....
  • 您能详细说明一下吗?

标签: c# android ios xamarin xamarin.forms


【解决方案1】:

您始终可以使用网络客户端将图像下载为文件,然后使用 StreamImageSource。

首先,您需要在表单项目:

public interface IDownloader
{
    byte[] Download(string Url);
}

那么,你需要一个Android项目的依赖服务:

[assembly: Dependency ( typeof (--yournamespace--.Downloader))]
public class Downloader : IDownloader
{
    public byte[] Download(string Url)
    {
        //This code is synchronous, I would recommend to do it asynchronously

        WebClient wc = new WebClient();
        return wc.DownloadData(Url);
    }
}

然后你可以下载图像并将其设置为源:

//I assume there exist an image control called img.

var dl = DependencyService.Get<IDownloader> ();
byte[] data = dl.Download(--url to the image--);
var ms = new MemoryStream(data);
img.Source = new StreamImageSource{ Source = (t) => ms };

【讨论】:

  • 如果我们按照这个程序将图像源设置为内存流,图像不会保存在设备的任何地方对吗?
  • 是的,Xamarin 将只使用 Stream 创建 Android 位图,这一切都在内存中完成。
  • iOS 也一样吗?
  • 我认为可以,但不能 100% 确定 iOS(操作系统本身)是否可以缓存图像。
  • 我会交叉检查。不过谢谢。你的回答很有帮助。我正在尝试发布另一个问题,重新禁用 iOS 上的屏幕截图功能,我知道它可以在 android 上完成,但也可以在 iOS 上完成?
【解决方案2】:

您没有提及您是否在线 - 如果您在线,您可以在 XAML 中为 Xamarin 表单使用 URL,例如:

 <Image HeightRequest="50" WidthRequest="50" HorizontalOptions="Center" VerticalOptions="Center" Source="{Binding UserAvatarURL}"/>

Forms 会处理它。

【讨论】:

  • 如果我们在 'UserAvatarURL' 中传递 url,它将显示给用户,但不会存储在本地任何地方或任何临时文件中?
  • 在上面的例子中,它是一个数据绑定字段,所以在我的视图模型中,实际的文本将被一个真实的 URL 替换,例如。 example.com/image.png - 如果你想替换绑定来尝试它,使用类似这样的东西(显然用真实的 URL 替换): example.com/pic.png">
  • 它可能会存储在临时文件中,但会被操作系统擦除,另一种选择是将文件下载到内存数组并使用该数组将图像源设置为 MemoryStream
  • @Gusman 是的 - 我认为操作员的问题是必须自己保存到本地工作,但你是对的,我可能做出了错误的假设,并且图像在本地缓存不过,它们看起来确实是暂时的。
  • @RussellYoung 是的,它们将是临时的,但如果图像包含敏感数据,那么这可能是一个安全漏洞。但无论如何,我绝不会在任何情况下存储敏感数据,我认为唯一合法的情况是扫描文档或医疗数据图像。
猜你喜欢
  • 1970-01-01
  • 2019-01-05
  • 2015-10-16
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-24
  • 2018-11-20
相关资源
最近更新 更多