小编and*_*250的帖子

Chrome 中的 FileReader 内存泄漏

我有一个具有文件上传功能的网页。上传以 5MB 块执行。我想在将每个块发送到服务器之前计算其哈希值。块由Blob对象表示。为了计算哈希值,我使用本机FileReader将此类 blob 读取到ArrayBuffer中。这是代码:

var reader = new FileReader();

var getHash = function (blob, callback) {
    reader.onloadend = function (e) {
        var hash = util.hash(e.target.result);
        callback(hash);
    };
    reader.readAsArrayBuffer(blob);
}

var processChunk = function (chunk) {
    if (chunk) {
        getHash(chunk, function (hash) {
            util.sendToServer(chunk, hash, function() {
                // this callback is called when chunk upload is finished
                processChunk(chunks.shift());
            });
        });
    }
}

var chunks = file.splitIntoChunks(); // gets an array of blobs
processChunk(chunks.shift());
Run Code Online (Sandbox Code Playgroud)

问题:使用FileReader.readAsArrayBuffer …

javascript memory memory-leaks file-upload filereader

5
推荐指数
1
解决办法
1556
查看次数

Mysql数据迁移-wbcopytables字符集

我正在尝试将一些数据从 MSSQL 移动到 MySQL。当我wbcopytables.exe在 mysql 连接上运行字符集似乎是错误的时,当数据包含表情符号图标时我收到错误(http://apps.timwhitlock.info/unicode/inspect?s=%F0%9F%8C %A8%E2%98%83%EF%B8%8F):

Incorrect string value: '\xF0\x9F\x8C\xA8\xE2\x98...' for column 'Value' at row 4
Run Code Online (Sandbox Code Playgroud)

我的服务器、数据库、表和列都有charset=utf8mb4collation=utf8mb4_unicode_ci。不过,我可以使用我在旁边创建的 .NET 应用程序将这些表情符号图标插入到该表中,因此这不是架构/服务器设置的问题。这让我认为wbcopytables.exe在连接上强制执行一些其他编码(可能是 utf8)。我尝试更改所有 mysql 变量以强制执行 utf8mb4,如 my.ini 中的其他 SO 问题中所建议的那样:

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET collation_connection = utf8mb4_unicode_ci'
skip-character-set-client-handshake
Run Code Online (Sandbox Code Playgroud)

编辑:以下是有关 wbcopytables.exe 本身的更多信息: https: //dev.mysql.com/doc/workbench/en/wbcopytables.html

mysql data-migration character-encoding

5
推荐指数
1
解决办法
1625
查看次数

JavaScript 中的文件切片会导致空 blob

我正在实现一个基于浏览器的分块文件上传器。要打开我正在使用的文件<input type="file" id="fileSelector" />和这段代码(简化):

$('#fileSelector').on('change', function () {
    _file = evt.target.files[0];
});
Run Code Online (Sandbox Code Playgroud)

我将文件切成块,但没有将块读入内存(不明确)。

问题:偶尔(对于上传文件的不到 0.1%)从底层文件切下的块是空的。例如,在上传大文件期间一切顺利,然后在该文件调用的中间:

var _blob = _file.slice(chunk.start, chunk.end, _file.type);
Run Code Online (Sandbox Code Playgroud)

结果是一个空切片(_blob.size为 0)。将此类 blob 发送到服务器 (.NET 4.6) 会导致Request.InputStream空值。我正在发送二进制数据:

_xhr.setRequestHeader('content-type', 'application/octet-stream');
_xhr.send(_blob);
Run Code Online (Sandbox Code Playgroud)

我还应该提到,_file.slice再次调用会产生相同的空 blob。我可以在 Chrome 57、Chrome 60(Win 和 Mac)、Mac Safari 10.1.1 和 Edge 15 中观察到这一点。其他浏览器也是可能的。

有什么问题吗?我正在考虑的事情:

  • 文件正在使用中
  • 文件/磁盘已损坏
  • 与此同时,该 blob 被 JavaScript 引擎 GCed - 如果是这种情况,如何确保它不被 GCed?
  • 浏览器错误(我发现了这个,但不确定它是否相关:https://bugs.chromium.org/p/chromium/issues/detail?id =167111 )

html javascript chunking

5
推荐指数
1
解决办法
1378
查看次数