JavaScript上传文件

效果

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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 JavaScriptFileReader 对象来解析上传的 txt 文件。 以下是一个简单的示例: ``` // 获取文件 input 元素 const fileInput = document.getElementById('file-input'); // 监听文件选择事件 fileInput.addEventListener('change', () => { // 获取选择的文件 const file = fileInput.files[0]; // 创建一个 FileReader 对象 const reader = new FileReader(); // 监听文件加载事件 reader.addEventListener('load', () => { // 读取完成,输出文件内容 console.log(reader.result); }); // 读取文件内容 reader.readAsText(file); }); ``` 这段代码会输出选择的 txt 文件的内容。 如果想要在页面中显示文件内容,可以将内容输出到一个元素中,例如: ``` // 获取文件内容输出元素 const output = document.getElementById('file-output'); // 将文件内容输出到元素中 output.textContent = reader.result; ``` ### 回答2: 要使用JavaScript解析上传的txt文件,可以使用File API来实现。步骤如下: 1. 首先,在HTML文件中添加一个文件上传的input元素: `<input type="file" id="fileInput">` 2. 然后,在JavaScript代码中监听文件上传事件,当文件上传时执行相应的操作: ```javascript const fileInput = document.getElementById('fileInput'); fileInput.addEventListener('change', function(e) { const file = e.target.files[0]; if (file) { const reader = new FileReader(); reader.onload = function(e) { const content = e.target.result; // 在这里使用content变量来处理解析后的txt文件内容 } reader.readAsText(file); } }); ``` 3. 在文件上传事件的处理函数中,创建FileReader对象,并使用readAsText()方法将上传的文件转换为文本格式。 4. 在FileReader对象的onload事件回调函数中,可以使用e.target.result获取转换后的文本内容。在这里你可以对txt文件的内容执行各种操作,如分解字符串、提取特定数据等等。 需要注意的是,以上代码只是基本的解析操作,具体的解析内容和操作可能因需求而异。 ### 回答3: 使用JavaScript解析上传的txt文件可以通过以下步骤实现: 1. 获取上传的文件。可以通过input[type="file"]元素的change事件监听文件选择事件,然后使用event.target.files获取到上传的文件对象。 2. 读取文件内容。可以使用FileReader对象读取上传的文件内容。首先创建FileReader实例,然后使用readAsText()方法读取文件内容。读取完成后,可以使用onload事件回调获取到文件的内容。 3. 解析文件内容。根据txt文件的格式和内容,编写相应的解析逻辑。例如,如果是逐行读取,可以使用split('\n')方法将内容按换行符分割为行数组,然后使用循环遍历每一行进行处理。 4. 使用解析结果进行进一步操作。将解析后的文件内容用于后续的逻辑处理,例如显示到页面上或进行其他计算。 以下是一个简单的示例代码,用于演示如何使用JavaScript解析上传的txt文件: ```javascript // HTML代码 <input type="file" id="txtFileInput" /> // JavaScript代码 document.getElementById('txtFileInput').addEventListener('change', function(event) { var file = event.target.files[0]; // 获取上传的文件对象 var reader = new FileReader(); reader.readAsText(file); // 读取文件内容 reader.onload = function() { var content = reader.result; // 获取文件内容 var lines = content.split('\n'); // 按换行符分割为行数组 // 根据需要进行进一步解析处理 for (var i = 0; i < lines.length; i++) { console.log('Line ' + (i+1) + ': ' + lines[i]); } }; }); ``` 这样,当用户选择txt文件上传后,JavaScript代码会将文件内容解析并在控制台上逐行显示出来。你可以根据具体需求修改解析和处理的逻辑。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值