从文件系统读取二进制文件作为 BLOB 以在犀牛中使用 javascript
Reading a binary file from the file system as a BLOB to use in rhino with javascript
我打算将 SheetJS 与犀牛一起使用。 sheetjs 在输入时采用二进制对象(如果我是正确的,则为 BLOB)。所以我需要使用 stranded java I/O 方法从系统中读取文件并将其存储到 blob 中,然后再将其传递给 sheetjs。例如:-
var XLDataWorkBook = XLSX.read(blobInput, {type : "binary"});
那么我如何从 java 中的二进制文件创建 BLOB(或适当的类型)以便将其传入。
我想我不能传递流,因为我想 XLSX 需要一个完全创建的对象来处理。
我自己找到了答案。我能够以这种方式完成它。
使用 InputStream 读取文件,然后将其写入 ByteArrayOutputStream。像下面。
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
...
buffer.write(bytes, 0, len);
然后从中创建一个字节数组。
byte[] byteArray = buffer.toByteArray();
最后我使用 [中的“Base64.encodeBase64String()”方法将它转换为 Base64 字符串(这也适用于我的情况)apache.commons.codec.binary包。所以我可以将 Base64 String 作为方法参数传递。
如果您进一步需要,还有许多库(第 3 方和默认库)可用于 Base64 到 Blob 的转换。
我打算将 SheetJS 与犀牛一起使用。 sheetjs 在输入时采用二进制对象(如果我是正确的,则为 BLOB)。所以我需要使用 stranded java I/O 方法从系统中读取文件并将其存储到 blob 中,然后再将其传递给 sheetjs。例如:-
var XLDataWorkBook = XLSX.read(blobInput, {type : "binary"});
那么我如何从 java 中的二进制文件创建 BLOB(或适当的类型)以便将其传入。
我想我不能传递流,因为我想 XLSX 需要一个完全创建的对象来处理。
我自己找到了答案。我能够以这种方式完成它。
使用 InputStream 读取文件,然后将其写入 ByteArrayOutputStream。像下面。
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
...
buffer.write(bytes, 0, len);
然后从中创建一个字节数组。
byte[] byteArray = buffer.toByteArray();
最后我使用 [中的“Base64.encodeBase64String()”方法将它转换为 Base64 字符串(这也适用于我的情况)apache.commons.codec.binary包。所以我可以将 Base64 String 作为方法参数传递。
如果您进一步需要,还有许多库(第 3 方和默认库)可用于 Base64 到 Blob 的转换。