图片上传: input type=“file” 学习总结

参考网址:
https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/Input/file

完整代码:
https://github.com/mdn/learning-area/blob/master/html/forms/file-examples/file-example.html

代码解析:

<!DOCTYPE html>
<html>

<head>
    <title>Complete file example</title>
    <style>
        html {
            font-family: sans-serif;
        }

        form {
            width: 600px;
            background: #ccc;
            margin: 0 auto;
            padding: 20px;
            border: 1px solid black;
        }

        form ol {
            padding-left: 0;
        }

        form li,
        div>p {
            background: #eee;
            display: flex;
            justify-content: space-between;
            margin-bottom: 10px;
            list-style-type: none;
            border: 1px solid black;
        }

        form img {
            height: 64px;
            order: 1;
        }

        form p {
            line-height: 32px;
            padding-left: 10px;
        }

        form label,
        form button {
            background-color: #7F9CCB;
            padding: 5px 10px;
            border-radius: 5px;
            border: 1px ridge black;
            font-size: 0.8rem;
            height: auto;
        }

        form label:hover,
        form button:hover {
            background-color: #2D5BA3;
            color: white;
        }

        form label:active,
        form button:active {
            background-color: #0D3F8F;
            color: white;
        }
    </style>
</head>

<body>
    <form>
        <div>
            <!-- 关联 input type="file" -->
            <label for="image_uploads">Choose images to upload (PNG, JPG)</label>
            <!-- 图片上传核心 input type="file" -->
            <input type="file" id="image_uploads" name="image_uploads" accept=".jpg, .jpeg, .png" multiple>
        </div>
        <!-- 图片展示区 -->
        <div class="preview">
            <p>No files currently selected for upload</p>
        </div>
        <div>
            <button>Submit</button>
        </div>
    </form>
    <script>
        var input = document.querySelector('input');
        var preview = document.querySelector('.preview');
        // input.style.opacity = 0;
        input.style.display = "none";
        // 监控事件 DOM事件
        input.addEventListener('change', updateImageDisplay);
        function updateImageDisplay() {
            // 清空装图片的盒子
            while (preview.firstChild) {
                preview.removeChild(preview.firstChild);
            }
            var curFiles = input.files;
            // 用户没有选择图片
            if (curFiles.length === 0) {
                // 创建一个p标签
                var para = document.createElement('p');
                // p标签下放一段文字
                para.textContent = 'No files currently selected for upload';
                // preview: 预览
                // 在放图片的div里面增加创建的p元素
                preview.appendChild(para);
            } else {
                // 用户选择了图片
                var list = document.createElement('ol');
                // 在放图片的div里面增加创建的ol元素
                preview.appendChild(list);
                // 用户选择了图片: curFiles.length === 1
                console.log(input.files);
                for (var i = 0; i < curFiles.length; i++) {
                    // 只循环一次
                    var listItem = document.createElement('li');
                    var para = document.createElement('p');
                    // 判断文件格式: 'image/jpeg', 'image/pjpeg', 'image/png'
                    if (validFileType(curFiles[i])) {
                        // curFiles[0]: 是一个对象,如下
                        // 0: File
                        // lastModified: 1562910468592
                        // lastModifiedDate: Fri Jul 12 2019 13: 47: 48 GMT + 0800(中国标准时间) { }
                        // name: "2.jpg"
                        // size: 863778
                        // type: "image/jpeg"
                        // webkitRelativePath: ""
                        // __proto__: File
                        // length: 1
                        // __proto__: FileList

                        // 把kb 转换 mb的自定义函数 returnFileSize()
                        para.textContent = 'File name ' + curFiles[i].name + ', file size ' + returnFileSize(curFiles[i].size) + '.';
                        var image = document.createElement('img');
                        // URL.createObjectURL : 图片curFiles[i]的地址
                        image.src = window.URL.createObjectURL(curFiles[i]);
                        // listItem: 创建的li元素
                        // 把图片 p元素放到li
                        listItem.appendChild(image);
                        listItem.appendChild(para);
                    } else {
                        // 文件格式不对
                        para.textContent = 'File name ' + curFiles[i].name + ': Not a valid file type. Update your selection.';
                        listItem.appendChild(para);
                    }
                    // list 创建的ol
                    list.appendChild(listItem);
                }
            }
        }
        var fileTypes = [
            'image/jpeg',
            'image/pjpeg',
            'image/png'
        ]
        // 判断文件格式: 'image/jpeg', 'image/pjpeg', 'image/png'
        function validFileType(file) {
            for (var i = 0; i < fileTypes.length; i++) {
                if (file.type === fileTypes[i]) {
                    return true;
                }
            }
            return false;
        }
        // 单位转换函数
        function returnFileSize(number) {
            if (number < 1024) {
                return number + 'bytes';
            } else if (number > 1024 && number < 1048576) {
                return (number / 1024).toFixed(1) + 'KB';
            } else if (number > 1048576) {
                return (number / 1048576).toFixed(1) + 'MB';
            }
        }
        // 完结 欢迎纠正 欢迎加QQ: 1361784611
    </script>
</body>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值