仅 JS - 不需要 jquery
>
只需创建一个输入元素并触发点击。
var input = document.createElement('input');
input.type = 'file';
input.click();
这是最基本的,弹出一个选择文件对话框,但如果不处理所选文件,它就没有任何用处...
处理文件
将onchange 事件添加到新创建的输入将允许我们在用户选择文件后执行操作。
var input = document.createElement('input');
input.type = 'file';
input.onchange = e => {
var file = e.target.files[0];
}
input.click();
目前我们有存储各种信息的文件变量:
file.name // the file's name including extension
file.size // the size in bytes
file.type // file type ex. 'application/pdf'
太棒了!
但是,如果我们需要文件的内容呢?
为了获取文件的实际内容,出于各种原因。放置图像,加载到画布中,使用 Base64 数据 url 创建一个窗口等。我们需要使用 FileReader API
我们将创建一个 FileReader 的实例,并将我们用户选择的文件引用加载到它。
var input = document.createElement('input');
input.type = 'file';
input.onchange = e => {
// getting a hold of the file reference
var file = e.target.files[0];
// setting up the reader
var reader = new FileReader();
reader.readAsText(file,'UTF-8');
// here we tell the reader what to do when it's done reading...
reader.onload = readerEvent => {
var content = readerEvent.target.result; // this is the content!
console.log( content );
}
}
input.click();
尝试将上述代码粘贴到您的开发工具的控制台窗口中,它应该会产生一个选择文件对话框,选择文件后,控制台现在应该打印文件的内容。
示例 - “Stackoverflow 的新背景图片!”
让我们尝试创建一个文件选择对话框来将 stackoverflows 背景图像更改为更辣的...
var input = document.createElement('input');
input.type = 'file';
input.onchange = e => {
// getting a hold of the file reference
var file = e.target.files[0];
// setting up the reader
var reader = new FileReader();
reader.readAsDataURL(file); // this is reading as data url
// here we tell the reader what to do when it's done reading...
reader.onload = readerEvent => {
var content = readerEvent.target.result; // this is the content!
document.querySelector('#content').style.backgroundImage = 'url('+ content +')';
}
}
input.click();
打开devtools,将上面的代码粘贴到控制台窗口,这应该会弹出一个选择文件对话框,在选择图像时,stackoverflows内容框背景应该会变为所选图像。
干杯!