通过AJAX发布帆布斑点:防止/删除本地缓存(Posting a canvas blob via A

2019-10-18 13:21发布

我通过AJAX使用的方法是这样上传的画布图像到我的服务器:

myCanvas.toBlob( function( blob ) {
    var fdata = new FormData( );
    fdata.append( 'myFile', blob );
    $.ajax( {
        url: 'http://myScript.foo',
        type: 'POST',
        data: fdata,
        processData: false,
        contentType: false
    } );
}, 'image/jpeg', 0.9 );

(与感谢https://stackoverflow.com/a/8244082/1180785 )

但根据Mozilla的,

toBlob [...]返回一个Blob表示包含在画布图像对象; 此文件可能在磁盘上被缓存或在所述用户代理的判断存储在存储器中

( https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement )

这是我的程序,图像没有保持很重要的(而不是作为一个限制,但作为一个隐私问题)。 所以,我需要知道,如果有一个保证,这可能缓存的副本将被删除,而当。 还有反删除程序的发现它的潜在危险,所以我想知道我是否能够覆盖数据或强制安全删除在一些其他的方式。

如果这是可能实现,而不用担心一个本地缓存副本相同的结果,它甚至会更好。 加密也是一种选择,如果可能的话。

我只关心现代浏览器,支持getUserMedia明确,所以没有IE(我有一个Flash后备旧版本浏览器,从内存中处理一切)。

Answer 1:

如果隐私和安全是非常重要的,你应该考虑生成data-uri从画布,而不是一个Blob对象。

由于斑点可能会或可能不会被存储(缓存)在磁盘上暂时的(如你提到即取消删除 ),该文件将受到安全形势。 当然是内存中的文件/字符串将可用于存储扫描但这是尽可能接近你会得到“安全”从画布上获得的图像转移时。

一个data-uri在只读存储器通常 *产生,通常包含base64编码的图像(如果你的形象是严重大仍然有它被分页到磁盘的风险)。

*)实现相关的,例如,它更可能是移动浏览器将使用临时到文件是否存在稀缺,可用内存资源-然而,这种可能的行为未记录。

为了得到一个data-uri使用,而不是:

canvas.toDataURL();

您可以选择指定的图像类型(默认为PNG):

canvas.toDataURL('image/jpeg'); //optional second parameter is quality [0.0, 1.0]

另一种选择是从帆布和存储在一个(输入)阵列直接提取的像素。 数据然后可传送或按原样可以使用一个压缩库发送所述数据之前压缩到例如拉链。

然而,这种方法是最有效的。



Answer 2:

在所有的相似性团块被删除时,要么,

  1. 有到它(垃圾收集)没有引用
  2. 的标签/窗口被关闭

在这种情况下“缓存”不超过长期平均值,而不是重新计算其每次访问时间。

缓存内容长期将是浪费存储空间,作为画布,旨在通过动态。 如果它是静态内容,一个<img>应该被使用。

我没有看过任何的源代码,但是这是一个合乎逻辑的结论。 jQuery的停止引用团块(当请求被发送)之后,就应该被垃圾收集器拾取并丢弃。


安全删除是非常低的水平和浏览器绝不会允许的。 它主要通过写入硬盘驱动器上的特定地址,这可能是打错了算盘,破坏成千上万的文件(在大量碎片的分区)的作品。 如果他们将其存储到磁盘,这将是由计算机取证恢复。



文章来源: Posting a canvas blob via AJAX: prevent/delete local cache