首页 新闻 会员 周边 捐助

如何把图片保存到客户端

0
悬赏园豆:100 [已解决问题] 解决于 2018-11-16 09:59

想求助一下大家,就是现在做了一个网站的项目放在服务器上,里面的一些图片是存在了阿里云oss。现在我想做的功能就是第一次预览到这些图片的时候把他们下载到客户端电脑里面。然后下次预览判断客户端这里有没有这些图片,有就直接取,没有再去阿里云拿。这种效果怎么做到啊?有没有大牛解解惑啊QAQ求教导!

我的天啊,要死啊的主页 我的天啊,要死啊 | 初学一级 | 园豆:112
提问于:2018-11-14 21:38
< >
分享
最佳答案
1

能把字符串图片路径base64编码以后存到localStorage吗,然后每次进入的时候读取localStorage。
localStorage存的比较大,不过base64编码也很大,这就比较难抉择了。

收获园豆:100
你风致 | 老鸟四级 |园豆:2215 | 2018-11-15 18:18

localStorage不大一点吧,存不了多少图片

会长 | 园豆:12463 (专家六级) | 2018-11-16 10:03

@会长: 大多了吧,cookie限制4kb,都能存多少东西了;
localStorage在不同浏览器限制不一样,2Mb,5Mb不等;
Mb和kb比起来,大太多了;
怕就是怕图片base64编码后的字符串也很大;
你可以试试看

你风致 | 园豆:2215 (老鸟四级) | 2018-11-16 10:13

@心悠魂然: 那也存不了几张图片啊,问主倒是没说他要存多大的图片,现在很多大图片一个就好几兆

会长 | 园豆:12463 (专家六级) | 2018-11-16 10:15
其他回答(5)
1

浏览器访问图片默认就是这样的

dudu | 园豆:30778 (高人七级) | 2018-11-14 21:45
0

实现不了,一是浏览器访问图片不会弹窗下载,二是即便弹出来了是否下载取决于用户,三是读取不到用户的图片下载到了什么地方。老老实实用OSS吧。
哈哈哈我知道你为什么要这样提需求,OSS收费,所以我昨天就写了个demo,图片存自己服务器上,虽然功能没有阿里云齐全。

顾星河 | 园豆:7281 (大侠五级) | 2018-11-15 09:23

这种需求发下来了,在想着怎么实现

支持(0) 反对(0) 我的天啊,要死啊 | 园豆:112 (初学一级) | 2018-11-15 09:25

说什么存cook?这个能存吗

支持(0) 反对(0) 我的天啊,要死啊 | 园豆:112 (初学一级) | 2018-11-15 09:26

@我的天啊,要死啊: 你想吖,如果我能读取到客户端电脑的图片资料, 那是不是意味着我可以读取某些视频呢,如果是这样的话,哇啊啊啊那用我网站的人我就能把他们的学习资料都盗取过来了(/ω\) 很显然,不太实际。我没见过,你找到解决方案的话记得和我说一下,我对这个也很感兴趣

支持(0) 反对(0) 顾星河 | 园豆:7281 (大侠五级) | 2018-11-15 09:26

@我的天啊,要死啊: cookie能存字符串,你可以把图片转成base64编码再存cookie里,但是cookie有大小限制,4kb,感觉存不了几个图片

支持(0) 反对(0) 顾星河 | 园豆:7281 (大侠五级) | 2018-11-15 09:29

@默卿: 对了!顺便问一下,那个什么RSA公钥私钥的一般存哪里啊?存客户端本地还是存服务器,感觉好烦啊!说存本地安全

支持(0) 反对(0) 我的天啊,要死啊 | 园豆:112 (初学一级) | 2018-11-15 09:30

@默卿: 我直接把浏览器自己的缓存打开给他看得了。。。。

支持(0) 反对(0) 我的天啊,要死啊 | 园豆:112 (初学一级) | 2018-11-15 09:30

@我的天啊,要死啊: 我对加密不熟悉 (/ω\)

支持(0) 反对(0) 顾星河 | 园豆:7281 (大侠五级) | 2018-11-15 09:33
0

需求谁不会发,难的只是实现而已。
公司发个需求让你一天赚100个亿,你可以打个电话问问马云,说不定他知道。

当然,最简单的就是,这个本来浏览器就有的,你买通了Google和微软提前实现了需求。

爱编程的大叔 | 园豆:30844 (高人七级) | 2018-11-15 11:46
0

public void Init监控和钱OnRemote()
{
if (_c监控.是否游客) return;
Task.Run(() =>
{
try
{
var rsg = Iqt.DoRequest(new RestRequestEx($"/api_1.0/is_subscribe?uid={Uid}"));
var state = rsg.GetDataBean<State>();
Dispatcher.Invoke(() => { Set监控和钱(state); });
}
catch (Exception e) { }
});
}

    void InitImageFromRemote()
    {
        Task.Run(() =>
        {
            try
            {
                Bitmap bmp = ReadImageFromLocal()?? ReadImageFromRemote();
                if (bmp == null) return;
                using (bmp)
                {
                    Dispatcher.Invoke(() => { _cPic.Source = bmp.GetBitmapSource(); });
                }
            }
            catch (Exception e) { }
        });
    }

    Bitmap ReadImageFromRemote()
    {
        此处省略
        using (var stream = new MemoryStream(response.RawBytes))
        {
            var bitmap = new Bitmap(stream);
            if (bitmap != null) SaveImageToLocal(bitmap);
            return bitmap;
        }
    }

    Bitmap ReadImageFromLocal()
    {
        此处省略
        if(File.Exists(filePath))
        {
            try
            {
                var bitmap = new Bitmap(filePath);
                return bitmap;
            }
            catch { }
        }
        return null;
    }

    void SaveImageToLocal(Bitmap bitmap)
    {
        此处省略
        var filePath = System.IO.Path.Combine(dirPath, $"{Uid}.aabbcc");
        bitmap.Save(filePath);
    }
花飘水流兮 | 园豆:13615 (专家六级) | 2018-11-16 00:06
0

客户端的图片你怎么拿,一个网站,把自己当病毒啊? 服务端存个几天作为缓存不就行了

holdengong | 园豆:212 (菜鸟二级) | 2018-11-16 08:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册