我目前正在研究HTML5文件API,我需要获取二进制文件数据.
The FileReader的readAsText,readAsDataURL方法工作正常,但readAsBinaryString返回相同的数据readAsText.
我需要二进制数据,但我得到一个文本字符串.我错过了什么吗?
我们通过拖放变量(使用 dropzone.js - 在此阶段它是 base64 加上用于指定文件类型的字符)来接收本地文件(通常是 PDF、PNG 或 JPG)。我们将它(现在是二进制的)加密到一个 javascript 变量中。然后我们使用该变量创建一个 Blob 并将其上传到运行 PHP 的服务器。(请参阅我们了解如何将 js 变量发送到 PHP $_FILE。)
我们发现 blob 的 .size 比我们上传的文件的 .length 大 50% 左右。(我们一直通过转换为 base64 然后使用 JSON 上传,但我们希望改变的一个原因是希望避免使用 base64 时大小增加 33%。)
从中等尺寸到较大尺寸,斑点始终大约 50%。作为一个小测试,我们使用 120 个字符作为输入创建了一个 Blob,发现 Blob.size 为 210。(我们通常使用正确的 file.type;image/png 只是为了让它被解释为没有的二进制数据)不需要编码。)从我们代码中的实际使用来看:我们上传了一个 900K 的 PDF 文件。类型类似于“应用程序/pdf”。由此产生的 blob 就像 1,400K。也尝试过 PNG。
我认为 Blob 应该与输入的大小相同,不是吗?我们可能做错了什么?
new Blob(["123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"], {type:"image/png"});
Run Code Online (Sandbox Code Playgroud)