JS文件上传<input type=“file“>

<input> type 类型为 file 时使得用户可以选择一个或多个元素以提交表单的方式上传到服务器上,或者通过 Javascript 的 File API 对文件进行操作 .

常用input属性:

  accept:指示file类型,没有时表示不限制类型,填入格式后选择文件时只能看见被允许的文件

      accept="image/png" 或 accept=".png" 表示只接受 png 图片.

      accept="image/png, image/jpeg" 或 accept=".png, .jpg, .jpeg" 表示接受 PNG/JPEG 文件.

      accept="image/*" 接受任何图片文件类型. audio/* 表示音频文件video/* 表示视频文件

      accept=".doc,.docx,.xml,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document"  接受任何 MS Doc 文件类型.

      accept 属性并不会验证选中文件的类型. 他只是为开发者提供了一种引导用户做出期望行为的方式而已, 用户还是有办法绕过浏览器的限制.

      因此, 在服务器端进行文件类型验证是必不可少的.

  multiple:Boolean ,指示用户能否多个输入,type为email或file时生效

  required:指定用户在提交表单之前必须保证该元素值不为空。当 type 属性是 hidden,image 或者按钮类型(submit,reset,button)时不可使用。

       :optional 和 :required CSS 伪元素的样式将可以被该字段应用作外观。

事件:

  change事件

示例

样式更改:可以通过设置opcitity:0;font-size:0进行覆盖操作

<template>
    <div>
        <!-- 上传触发change事件 -->
        <input type="file" id="upload" multiple @change="upload">
</template>

<script>
    export default {
        methods: {
            upload(e) {
                // 获取文件方式1
                let files=document.getElementById('upload').files  
                // 获取文件方式2
                let file = e.target.files[0]

                // 每个 file 对象包含了下列信息: 
                // name: 文件名.
                // lastModified: UNIX timestamp 形式的最后修改时间.
                // lastModifiedDate: Date 形式的最后修改时间.
                // size: 文件的字节大小.
                // type: 文件类型.

                // 如果需要转化为base64
                let reader = new FileReader();
                reader.readAsDataURL(file);
                reader.onload = function (res) {
                    let base = res.target.result
                }

                // 如果需要获取/限制图片尺寸
                let myimg = URL.createObjectURL(file);
                let img = new Image();
                img.src = myimg;
                img.onload = function () {
                    if (img.width !== 860 && img.height !== 450) {
                        alert("只能上传860*450px的图片!");
                    } else {
                        // 操作……
                        // 还可以根据file.type判断类型,根据file.size限制判断字节,1M = 1024 * 1024
                        const formdata = new FormData()
                        // 1.单文件上传时
                        formdata.append('file', file)
                        // 2.多文件上传时
                        for (let key in e.target.files) {
                            if (key != 'length' && key != 'item') {
                                data.append('file[]', e.target.files[key])
                            }
                        }
                        // 调接口,请求data为formdata
                    }
                }
            }
        }
    };
</script>

拓展:获取视频第一帧

 let dataURL = "";
            let video = $(".empty_box_video video").get(0);
            $(".empty_box_video video").attr("crossOrigin", "anonymous"); //处理跨域
            video.addEventListener("loadeddata", function () {
                setTimeout(() => {
                    let canvas = document.createElement("canvas");
                    canvas.width = 400;
                    canvas.height = 300;
                    canvas.getContext("2d").drawImage(video, 0, 0, 400, 300); //绘制canvas
                    dataURL = canvas.toDataURL(); // 第一帧url,转换为base64
                    $('#aaa').attr("src", dataURL);
                }, 2000);
            });

您可以使用以下代码来实现您的要求: ```html <style> #entryDetail { width: 100%; table-layout: fixed; } th, td { padding: 10px; text-align: center; } th:first-child, td:first-child { width: 10%; } th:nth-child(2), td:nth-child(2) { width: 15%; } th:nth-child(3), td:nth-child(3), th:nth-child(4), td:nth-child(4), th:nth-child(5), td:nth-child(5) { width: 12%; } th:nth-child(6), td:nth-child(6) { width: 20%; } th:last-child, td:last-child { width: 16%; } tbody tr:hover { background-color: #f5f5f5; } </style> <script> function deleteTableRow(btn) { var row = btn.parentNode.parentNode; row.parentNode.removeChild(row); } </script> <table id="entryDetail"> <thead> <tr> <th>操作</th> <th>提单号/运单号</th> <th>一程日期</th> <th>二程日期</th> <th>预计到货日期</th> <th>海船公司</th> <th>放箱日期</th> <th>放箱单上传</th> </tr> </thead> <tbody> <tr> <td><input type="button" name="comment" onclick="deleteTableRow(this)" value="删除"></td> <td><input type="text" name="comment"></td> <td><input type="date" name="date1"></td> <td><input type="date" name="date2"></td> <td><input type="date" name="date3"></td> <td><input type="text" name="comment1"></td> <td><input type="date" name="date4"></td> <td><input type="file" name="attachment"></td> </tr> </tbody> </table> ``` 此代码将表格的宽度设置为100%,并使其表格布局固定。它还将表头和单元格的填充和文本对齐方式设置为居中。每个表头和单元格都有一个宽度百分比,以便在表格宽度变化时自适应。还添加了一个鼠标悬停样式以提高用户体验。在代码的底部,有一个JavaScript函数deleteTableRow(btn),它将从表格中删除所在行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值