关于原生html和js上传文件的处理

news/2024/7/7 8:46:12

目录

        • 基本结构
        • 样式处理
          • 为啥要做样式处理
          • 怎么处理样式
        • input内用到的属性及用法
          • accept 可以上传的文件类型
        • 获取上传后的文件
          • sth.files
          • 字段解释
        • 获取视频文件的时长
        • 获取上传后文件生成的blob链接
        • 参考文档

基本结构

<label for="sth">上传文件</label>
<input type="file" id="sth" name="nickname">

图1:
在这里插入图片描述


样式处理

为啥要做样式处理

看上面图1,原始样式很不好看,也不好处理。项目中,还会根据文件上传的状态,给出提示或其他交互内容。在原始的样式中,不容易实现。所以需要重新处理样式。

怎么处理样式

比如,项目中样式需要做成这样的:
在这里插入图片描述
具体做法是,因为点击label内容,就相当于点击了input上传按钮, 所以,根据这个特性,我们就把所有要表现出来的样式都放在label标签内,然后把input标签隐藏起来。

比如这样:

<label for="sth">
  <span>上传视频</span>
  <img src="./xxx" alt="">
</label>
<input type="file" id="sth" name="nickname" style="display: none;">

input内用到的属性及用法

accept 可以上传的文件类型
  • 不写就默认可以上传所有类型的文件
  • 写了之后,点击上传,就会根据要求去找设备中的符合类型的文件。 不符合类型的文件,就不会显示出来,更没法上传。
    • 上传word文档
      • accept=".doc,.docx"
    • 音频文件
      • 任何音频文件
        • accept="audio/*"
      • 特定音频文件写法一
        • 直接写,以.mp3格式为例
        • accept=".mp3"
        • 如果可以传多种格式,就用,把格式隔开
        • 例如accept=".mp3, .wma"
      • 特定音频文件写法二
        • 在格式前面加上音频标识,然后把.去掉
        • accept="audio/mp3, audio/wma"
    • 视频文件
      • 任何视频文件
        • accept="video/*"
      • 特定视频文件写法一
        • accept=".mp4,.avi"
      • 特定视频文件写法二
        • accept="video/mp4, video/avi"
    • 图片文件
      • 任何图片文件
        • accept="image/*"
      • 特定图片文件写法一
        • accept=".jpg, .png"
      • 特定图片文件写法二
        • accept="image/jpg, image/png"

获取上传后的文件

<label for="sth">
  <span>上传视频</span>
  <img src="./xxx" alt="">
</label>
<input type="file" id="sth" name="nickname" style="display: none;">

以上面代码为例:

var sth = document.querySelector('#sth'); // 获取到输入框
sth.files

获取整个文件:

在这里插入图片描述

字段解释
  • lastModified 最近一次修改的时间戳
  • lastModifiedDate 最近一次修改文件的标准时间
  • name 文件全名
  • size 文件大小,单位是字节。比如100M大小就是100 * 1024 *1024字节
  • type 文件类型
  • length 文件个数

获取视频文件的时长

// 时长单位是秒s
var fileUrl = URL.createObjectURL(sth.files[0]);
var file_url = new Audio(fileUrl);
var duration;
file_url.addEventListener('loadedmetadata', function() {
  duration = file_url.duration;
  console.log(duration); // 时长
})

获取上传后文件生成的blob链接

var fileUrl = URL.createObjectURL(sth.files[0]);
console.log('fileUrl: ', fileUrl);

参考文档

  • https://www.w3school.com.cn/tags/tag_input.asp
  • https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/Input/file
  • 前端群:1064534163


http://www.niftyadmin.cn/n/3124514.html

相关文章

性能更好的js动画实现方式---requestAnimationFrame

用js来实现动画&#xff0c;我们一般是借助setTimeout或setInterval这两个函数&#xff0c;css3动画出来后&#xff0c;我们又可以使用css3来实现动画了&#xff0c;而且性能和流畅度也得到了很大的提升。但是css3动画还是有不少局限性&#xff0c;比如不是所有属性都能参与动画…

UVA - 294 Divisors (约数)(数论)

题意&#xff1a;输入两个整数L&#xff0c;U(1<L<U<109,U-L<10000),统计区间[L,U]的整数中哪一个的正约数最多。如果有多个&#xff0c;输出最小值。 分析&#xff1a; 1、求一个数的约数&#xff0c;相当于分解质因子。 2、例如60 2 * 2 * 3 * 5。对于2来说&…

9个 SSH常用命令选项

9个 SSH常用命令选项 SSH 是什么 SSH&#xff08;全称 Secure Shell)是一种加密的网络协议。使用该协议的数据将被加密&#xff0c;如果在传输中间数据泄漏&#xff0c;也可以确保没有人能读取出有用信息。要使用 SSH&#xff0c;目标机器应该安装 SSH 服务端应用程序&#xff…

关于js中namespace命名空间模式

命名空间有助于减少程序中所需要的全局变量的数量&#xff0c;并且同时有助于避免命名冲突或过长的名字前缀。 关于命名空间的例子&#xff1a; 1 /**2 * 创建全局对象MYAPP3 * module MYAPP4 * title MYAPP Global5 */6 var MYAPP MYAPP || {};7 8 /**9 * 返回指定的命名空间…

react全家桶项目,cuckoo

https://gitee.com/guozia007/cuckoo

Ios转场动画,type动画类型,跳转控制器动画

2019独角兽企业重金招聘Python工程师标准>>> 转场动画是针对view图层的动画 #import "DYViewController.h"interface DYViewController () property (weak, nonatomic) IBOutlet UIImageView *imageView;property (nonatomic, assign) int index;endimple…

spark知识点_RDD

来自官网的Spark Programming Guide&#xff0c;包括个人理解的东西。 这里有一个疑惑点&#xff0c;pyspark是否支持Python内置函数&#xff08;list、tuple、dictionary相关操作&#xff09;&#xff1f;思考加搜索查询之后是这么考虑的&#xff1a;要想在多台机器上分布式处…

工作笔记——js前端规范

去年年末做了一个项目&#xff0c;因为第一次做前端管理职位&#xff0c;第一次做整个项目的前端架构很多东西都不熟悉&#xff0c;作为一次大胆的尝试。 js方面的只有一个坑&#xff0c;那就是前端与后端的网络层封装&#xff0c;这一块是在后端的协助下开发的。网络层封装的过…