我有一个由上传的excel文件列表组成的下拉列表。我可以随时检索文件路径。我尝试做的是,当用户选择下拉列表中列出的一个文件名时,我将使用javascript获取物理文件,并将其传递给SheetJS代码以读取和处理该文件。
下面是我正在苦苦挣扎的代码:
function handleFile(e) {
rABS = document.getElementsByName("userabs")[0].checked;
use_worker = document.getElementsByName("useworker")[0].checked;
var files = e.target.files; // <--- trying to modify this part
var f = files[0];
{
var reader = new FileReader();
var name = f.name;
reader.onload = function (e) {
.....根据SheetJS的原始代码,通过上传输入文件类型或拖放来检索文件。在这种情况下,文件可以存储到FileList对象中,并在上面的事件中检索。当用户选择输入文件中的一个文件时,调用上面的代码。
但在我的例子中,我不能动态地添加到FileList对象中,因为文件在下拉列表中。
我正在寻找一些方法来动态地将文件添加到输入文件中,这样文件就可以存储到FileList对象中。我仍在寻找解决方案,但我怀疑这是否可行。
因此,我想寻求任何关于如何从下拉列表中获取单个用户选择的文件并发送到上面的代码以便FileReader读取的好建议。
以下是SheetJS演示和代码文件:
SheetJS Demo site
谢谢
发布于 2015-09-04 12:03:59
在考虑了如何修改代码以使FileReader能够读取文件之后,我想到了为FileReader创建一个可读取的文件对象。在我的例子中,我不需要传入多个文件,只需要传入一个文件,所以创建File对象并传入文件路径对我来说是可行的。
但是使用特定的文件创建File对象是不够的。我发现我需要创建Blob,因为File对象需要它。我不确定Blob和文件对象thou之间的原因是什么。
所以这就是我所要改变的。而不是
var files = e.target.files;我将其用于files变量:
var someBlob = new Blob(['same way...'], { type: 'text/plain' })
var parts = [someBlob, '...you construct blob', new ArrayBuffer()];
var files = new File(parts, strFilePath, {
lastModified: new Date(0), // optional - default = now
type: "overide/mimetype" // optional - default = ''
});现在files变量将仅获取该单个文件的数据,因此我更改了以下变量:
var fname = files.name;
//var f = files[0];
var f = files;现在我可以用FileReader读取文件了。
https://stackoverflow.com/questions/32369986
复制相似问题