zhenguilin / javascript-note

Here are some notes for javascript
https://github.com/zhenguilin/javascript-note
0 stars 0 forks source link

原生JS操作文件 #26

Open zhenguilin opened 6 years ago

zhenguilin commented 6 years ago

在HTML表单中,可以上传文件的唯一控件就是

注意:当一个表单包含时,表单的enctype必须指定为multipart/form-data,method必须指定为post,浏览器才能正确编码并以multipart/form-data格式发送表单的数据。

出于安全考虑,浏览器只允许用户点击来选择本地文件,用JavaScript对的value赋值是没有任何效果的。当用户选择了上传某个文件后,JavaScript也无法获得该文件的真实路径:

zhenguilin commented 6 years ago

通常,上传的文件都由后台服务器处理,JavaScript可以在提交表单时对文件扩展名做检查,以便防止用户上传无效格式的文件

//  表单提交时调用此方法
function check(){
            var f = document.getElementById('test-file-upload');
            var filename = f.value; // 'C:\fakepath\test.png'
            alert(filename);
            if (!filename || !(filename.endsWith('.jpg') || filename.endsWith('.png') || filename.endsWith('.gif'))) {
                alert('Can only upload image file.');
                return false;
            }
            return true;
        }
zhenguilin commented 6 years ago

File API

HTML5的File API提供了FileFileReader两个主要对象,可以获得文件信息并读取文件。 下面的例子演示了如何读取用户选取的图片文件,并在一个<div>中预览图像:

var
    fileInput = document.getElementById('test-image-file'), // input file 标签
    info = document.getElementById('test-file-info'),  // P标签,用来显示信息
    preview = document.getElementById('test-image-preview'); // div用来显示图线
// 监听change事件:
fileInput.addEventListener('change', function () {
    // 清除背景图片:
    preview.style.backgroundImage = '';
    // 检查文件是否选择:
    if (!fileInput.value) {
        info.innerHTML = '没有选择文件';
        return;
    }
    // 获取File引用:
    var file = fileInput.files[0];
    // 获取File信息:
    info.innerHTML = '文件: ' + file.name + '<br>' +
                     '大小: ' + file.size + '<br>' +
                     '修改: ' + file.lastModifiedDate;
    if (file.type !== 'image/jpeg' && file.type !== 'image/png' && file.type !== 'image/gif') {
        alert('不是有效的图片文件!');
        return;
    }
    // 读取文件:
    var reader = new FileReader();
    reader.onload = function(e) {
        var
            data = e.target.result; // 'data:image/jpeg;base64,/9j/4AAQSk...(base64编码)...'            
        preview.style.backgroundImage = 'url(' + data + ')';
    };
    // 以DataURL的形式读取文件:
    reader.readAsDataURL(file);
});