js input文件上传

(1)设置类型type='file'
	属性:
		accept='格式1,格式2'  前台筛选文件格式
			允许所有图片格式:"image/*"
		multiple  多选
		value    获取第一个文件名或清空
	 
(2)若要模拟用户点击
	input对象.click()
	
	
(3)监听上传文件
	onchange=(e)=>{
		(1)获取上传文件信息
			方式一:e.target.files
			方式二:input节点.files
			
			files中的每个file属性:
		     name: 文件名,
             lastModified: 时间戳,
             lastModifiedDate:Tue Oct 15 2019 12:43:01 GMT+0800 (中国标准时间)形式的最后修改时间.
             size: 文件的字节大小,
             type: 文件类型
				
		(2)获取文件名:
			方式一:通过(1)中的方式获取到file对象,file.name
			方式二:input节点.value; 获取到的始终是第一个文件的绝对路径

	}
	
(4)使用FileReader监听文件上传预览
	
(5)若要上传多个文件input添加属性
	multiple="multiple"
	
(6)限制上传文件个数
	回调中做判断
	
(7)清空选择列表
	input节点.value=null/[];
	
(8)上传预览展示图标(文件、图片等)
	根据获得的文件的type属性,文本等通过不同字体图标文件来展示,图片可直接通过fileReader转换结果呈现
	
(9)accept属性

在这里插入图片描述在这里插入图片描述在这里插入图片描述代码示例:

import React, { useState,useCallback,useRef,useEffect } from 'react';
import PropTypes from 'prop-types'
import './upload.css';

function App(props){
  
    // const [arr,setArr] = useState([]);
    const inputf = useRef(null);
    const { disabled } = props;

    const _onClick = useCallback(() => {
        inputf.current.click();


    }, [])
    
    const _onChange = useCallback((ev) => {
        let arr = [];
        let files = ev.target.files;
        Object.keys(files).forEach((item, index) => {
            let fileReader = new FileReader();
            
            fileReader.readAsDataURL(files[item]);
            fileReader.onload = function (e)
            {
                arr.push({url:e.target.result,type:files[item].type,size:files[item].size,fileName:files[item].name});
                
                if (arr.length==Object.keys(files).length)
                {
                    props.onLoad(arr);
                }
            }  
            
        })

 


    },[])

    return(

        <div className={`jf-upload-container ${!disabled&&'jf-upload-container-notDisabled'}`}>
            <input  multiple ref={inputf} onChange={_onChange} type="file" className='je-upload-file' />
            <i onClick={_onClick} className='iconfont icon-hao jf-upload-icon'>
                
            </i>
        </div>
    )
}

App.propTypes = {
    disabled: PropTypes.bool,
    onLoad:PropTypes.func
}

App.defaultProps = {
    onLoad:()=>{}
}


export default React.memo(App);
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值