首页 > 编程语言 >JavaScript上传文件

JavaScript上传文件

时间:2023-06-07 10:22:25浏览次数:45  
标签:文件 base64 JavaScript 300px height width imgEle reader 上传

效果

screenshots.gif

实现

  • 无论是上传文件还是上传图片,用的都是input标签的type="file"
  • input标签触发onChange事件时,会接受input元素本身作为参数,元素对象的files属性,值是fileList(即文件列表,列表中是一个个文件对象,文件对象包括文件的名称,大小等);
  • 有了文件列表之后,需要创建一个FileReader对象,对象的readerAsDataURL()方法可以将上传的图片转为base64,然后存入到图片路径,这样就可以上传任意位置的路径;
  • 图片的预览要注意文件的读取是异步的,所以要给FileReader对象一个读取完成的方法,使用readAsDataURL会返回一个url,这个值就保存在事件对象的result里,img通过加载这个地址,完成图片的加载;

代码

<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8">

  <meta http-equiv="X-UA-Compatible" content="IE=edge">

  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>Document</title>

</head>

<style>

  .container {

    width: 500px;

    height: 800px;

  }

  .img-container {

    width: 300px;

    height: 300px;

    position: relative;

  }

  .file-container {

    margin-top: 20px;

    width: 300px;

    height: 100px;

    border: 1px solid #d88080;

  }

  .show {

    width: 300px;

    height: 300px;

    border: 1px solid rgb(71, 219, 128);

  }

  .upload {

    width: 300px;

    height: 300px;

    border: 1px solid rgb(216, 120, 120);

    position: absolute;

    top: 0;

    left: 0;

  }

  .upload .icon {

    font-size: 40px;

    color: blue;

    margin-top: 100px;

    height: 50px;

    cursor: pointer;

    text-align: center;

  }

  .upload .text {

    width: 300px;

    height: 50px;

    font-size: 16px;

    text-align: center;

  }

  .upload .img-input {

    width: 300px;

    height: 300px;

    position: absolute;

    top: 0;

    left: 0;

    opacity: 0;

  }

</style>

<body>

  <div class="container">

    <div class="img-container">

      <div class="show"></div>

      <div class="upload">

        <div class="icon">+</div>

        <div class="text">请选择图片</div>

        <input class="img-input" type="file" onchange="uploadImg(this)" />

      </div>

    </div>

    <div class="file-container">

      <p>请上传文件</p>

      <input class="file-input" type="file" onchange="uploadFile(this)" />

    </div>

  </div>

</body>

<script type="text/javascript">

  uploadImg = function (file) {

    console.log(file.files);

    let reader = new FileReader()

    reader.readAsDataURL(file.files[0])

    reader.onloadend = function (e) {

      console.log("e.target.result", e.target.result);

      let base64 = e.target.result.split(',')[1]

      getBase64(base64)

      console.log("base64", base64);
      //接下来是发送ajax请求,就不演示了,在上传成功(即请求结果成功)后,回显图片,调用createImg(res)函数,参数是res

    }

  }

  function createImg(imgSrc) {

    let imgEle = document.createElement('img')

    imgEle.src = imgSrc

    document.querySelector('.upload').appendChild(imgEle)

  }

  function getBase64(base64) {

    let base64Res = 'data:image/jpg;base64,' + base64.replace(/[\r\n]/g)

    console.log("base64Res ", base64Res); // === e.target.result

    let imgEle = document.createElement('img')

    imgEle.style.width = '300px'

    imgEle.style.height = '300px'

    imgEle.style.position = 'absolute'

    imgEle.style.top = 0

    imgEle.style.left = 0

    imgEle.src = base64Res

    document.querySelector('.upload').appendChild(imgEle)

  }

  uploadFile = function (file) {

    let reader = new FileReader()

    reader.readAsText(file.files[0])

    console.log(reader);

    reader.onload = () => {

      let res = JSON.parse(decodeURIComponent(reader.result))

      console.log(res);  //不带""

      console.log(reader.result); //带""

    }

  }
  
</script>

</html>

标签:文件,base64,JavaScript,300px,height,width,imgEle,reader,上传
From: https://www.cnblogs.com/rain111/p/17462594.html

相关文章

  • 记录一次POI导出文件超时报错的问题
    后端日志错误信息![在这里插入图片描述](https://img-blog.csdnimg.cn/20200622165735646.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxODM3OTkzNzAy,size_16,color_FFFFFF,t_70)解决办法在nginx的location中......
  • 设置python的启动文件
    设置启动文件PYTHONSTARTUP类似于profile这个文件在交互会话期是只读的,当Python从脚本中解读文件或以终端/dev/tty做为外部命令源时则不会如此,它与解释器中不受限制的使用。你也可以在这个文件中改变sys.psl和sys.ps2指令。如......
  • Java中使用POI读取大的Excel文件或者输入流时发生out of memory异常参考解决方案
     使用ExcelStreamingReader,这个第三方工具会把一部分的行(可以设置)缓存到内存中,在迭代时不断加载行到内存中,而不是一次性的加载所有记录到内存,这样就可以不断的读取excel内容并且不影响内存的使用。  但是这个工具也有一定的限制:只能用于读取excel的内容,写入操作不可用;可以使......
  • 读取FTP文件,并打包成压缩包下载
    importjava.io.*;importjava.net.SocketException;importjava.net.URLEncoder;importjava.util.List;importjava.util.zip.ZipEntry;importjava.util.zip.ZipOutputStream;importorg.apache.commons.net.ftp.FTPClient;importorg.apache.commons.net.ftp.FTPF......
  • SRC漏洞挖掘未授权上传webshell
    以下是我如何将webshell上传到一个旧目标中,这是使用谷歌dorks,Js检查和文件上传过滤器绕过。过程1、我随机选择了一个范围很大的目标开始2、我启动了自动化脚本来发现使用的技术、domains、IP...3、我找到了一个叫intranet.redacted.com子域名,使用的服务器是IIS8或7,我不记......
  • 实验五 文件应用编程
    task6实验源码1importcsv23title=['原始数据','四舍五入后的数据']45lst=[]6yuan_lst=[]7hou_lst=[]8withopen('data6.csv','r')asf:9read_lst=f.readlines()10foriinrange(1,len(read_l......
  • Python写文件时加锁,避免写入过程中被读取
    问题:Linux上有个Python2脚本每天定时生成一些数据,并覆盖写入文件A,文件内容是每行一个Json字符串。有一个乙方的采集器程序(类似filebeat)需要读取文件A,但发现读取的数据有截断,导致解析失败。怀疑是因为采集器读取文件A的时候,文件A写入还未结束。解决:由于采集器程序是乙方自研的,属......
  • 自定义上传图片,动态拼接html元素,node插入/替换指定位置旧元素
    <!DOCTYPEhtml><head>  <metaname="viewport"    content="width=device-width,initial-scale=0.5,maximum-scale=1.0,minimum-scale=0.5,user-scalable=yes">  <title>上传图片</title></head><bo......
  • 几种分布式文件系统的优缺点归纳与总结
    1、常用的分布式文件系统有以下几种:1.HadoopHDFS:HadoopDistributedFileSystem(HDFS)是ApacheHadoop生态系统的一部分,用于存储和处理大数据。2.Ceph:Ceph是一个开源的分布式存储系统,提供了高可用性、高性能和可扩展性。3.GlusterFS:GlusterFS是一个开源的分布式文件系统,提供......
  • 实验五 文件应用编程
    task6.py1withopen('data6.csv','r',encoding='gbk')asf:2data1=f.read().split('\n')3deldata1[0]4foriinrange(len(data1)):5data1[i]=eval(data1[i])6data1[i]=float(data1[i])7......