广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >web前端怎么上传文件
  • 695
分享到

web前端怎么上传文件

2024-04-02 19:04:59 695人浏览 泡泡鱼
摘要

这篇文章主要介绍“web前端怎么上传文件”,在日常操作中,相信很多人在WEB前端怎么上传文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”web前端怎么上传文件”的疑惑有所帮

这篇文章主要介绍“web前端怎么上传文件”,在日常操作中,相信很多人在WEB前端怎么上传文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”web前端怎么上传文件”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

web前端怎么上传文件

上传文件

项目中会有很多文件上传的需求,例如:头像上传、表格文件、Word文档等…

上传必备表单元素:

<input type="file">

进行文件上传的时候,
1.表单必须是post请求
2.表单必须声明不要对数据进行编码 - enctype=multipart/fORM-data

传送数据的格式就是键值对的形式,且数据都是js的数据类型,但文件进行传输的时候,只有两种形式去传输:

  1. 字符串的形式去描述一个文件

  2. 以文件流的形式去描述一个文件

传统开发模式上传

后端混在一起开发

传统开发模式的上传需要将表单中选择的文件传送给后端,让后端做上传:

<form action="./upload.PHP" method="post" enctype="multipart/form-data">
    <input type="file" name="avatar">
    <input type="submit" value="上传"></form>

此时的表单中必须有enctype这个属性,这个属性的说明如下图:

web前端怎么上传文件

点击上传按钮后,后端对文件进行上传处理,以php为例:

echo "上传文件名: " . $_FILES["avatar"]["name"] . "<br>";  上传文件的名称
echo "文件类型: " . $_FILES["avatar"]["type"] . "<br>";  上传文件的类型
echo "文件大小: " . ($_FILES["avatar"]["size"] / 1024) . " kB<br>";  上传文件的大小,以字节计
echo "文件临时存储的位置: " . $_FILES["avatar"]["tmp_name"];  存储在服务器的文件的临时副本的名称
echo $_FILES["file"]["error"]  由文件上传导致的错误代码

将文件保存到服务器中:

move_uploaded_file($_FILES["avatar"]["tmp_name"], "upload/" . $_FILES["avatar"]["name"]);
echo "文件存储在: " . "upload/" . $_FILES["avatar"]["name"];

在实际开发中,为了提高效率,通常都会使用前后端分离开发。

前后端分离上传

前端做前端,后端做后端,最终使用接口文档对接 - 核心技术是 ajax

前后端分离开发,应用的主要技术就是ajax。上传同样可以使用ajax来上传。

FormData是js内置的一个构造函数,构造出来的对象可以识别文件信息。

使用方式:

构造FormData对象,将文件信息添加到FormData对象中,然后上传。

文件信息在文件选择控件中:表单.files

例:

<body>
    <input type="file" name="avatar">
    <input type="button" value="上传"></body><script>document.querySelector('[type="button"]').onclick = function(){
	 console.log(document.querySelector('[type="file"]').files)}</script>

web前端怎么上传文件

FormData对象有一个特点,将文件信息添加进去后,直接打印不能看到文件信息,需要使用for of遍历才能看到:

var formdata = new FormData();var fileinfo = document.querySelector('[type="file"]').files[0];formdata.append('avatar',fileinfo) / 将文件信息添加到FormData对象中
console.log(formdata)for(var v of formdata){
    console.log(v)}

web前端怎么上传文件

FormData对象中也可以添加别的数据,进行一起提交:

formdata.append('avatar',fileinfo)formdata.append('age',12)for(var v of formdata){
    console.log(v)}

web前端怎么上传文件

从FormData对象中删除一个数据,使用:

formdata.delete(键)

有时候,我们在一个表单中需要上传多个文件,此时,FormData中可以不用追加一个文件信息,可以在构造FormData对象的时候,将整个表单对象传入,他会自动识别所有数据:

<body><form action="">
    <input type="text" name="age" value="20">
    <input type="file" name="avatar">
    <input type="button" value="上传"></form></body><script>document.querySelector('[type="button"]').onclick = function(){
    var formdata = new FormData(document.querySelector('form'));
    for(var v of formdata){
        console.log(v)
    }}</script>

web前端怎么上传文件

当使用FormData上传的时候,将FormData对象当做数据传入,不需要修改请求头,浏览器会自动修改。

此时已经实现了前后端分离上传了,但是正常项目中都会有一个预览图片的功能。

我们可以让后端在实现上传后,将上传以后的文件名称传送给前端,让前端渲染返回的图片路径。

但这样是在上传以后预览的,假设我们选择了文件以后,就想看看这个文件是否要上传,也就是在上传之前要预览的话,还是没有办法实现。

我们可以利用H5提供的FileReader来读取文件并预览,然后决定是否要上传。

ajax上传

ajax进行上传后

 var xhr = new XMLHttpRequest;
    xhr.onreadystatechange = function(){
        if(xhr.readyState === 4){
            if(xhr.status>=200 && xhr.status<300){
                var res = xhr.responseText;
                // console.log(res);
                if(res==1){
                     alert('上传成功')
                     location.reload()
                }
            }
        }
    }
    xhr.open('post','2-upload.php')

将文件数据放在send中进行传送
需要借助H5提供的构造函数FormData - 用来识别文件信息

var fd = new FormData()

将文件信息放在fd这个对象中 - 用fd的append方法

文件信息在哪里?

var file = document.querySelector('[type="file"]')
    // console.dir(file);
    var fileinfo = file.files[0] / 文件信息

append方法,是将文件放入这个对象中,对象就需要键值对,参数1是键,参数2是文件信息

fd.append('avatar',fileinfo)

fd有一个特性,就是直接打印他, 看不到其中的内容 需要遍历才能看到其中的数据 - 必须使用 for of

for(var value of fd){
         console.log(value);
    }

fd除了能添加文件信息,还可以添加数据

fd.append('username',document.querySelector('[name="username"]').value)

上传文件的时候,利用FormData,里面就有了数据和文件信息,其实最终文件和数据以二进制数据流进行传送的,不需要设置请求头,因为ajax会自动调整

文件数据其实就是fd

php:

现在能打印出数据,文件存到了临时目录中
上传就是将临时文件移动到服务器中

header("content-type:text/html;charset=utf8");echo "<pre>";print_r($_FILES);move_uploaded_file($_FILES['avatar']['tmp_name'],'./upload/'.$_FILES['avatar']['name']);// echo '上传成功';echo './upload/'.$_FILES['avatar']['name'];
 echo "<script>
     alert('上传成功')
     location.assign('./1-上传表单.html')

ajax 上传前:

当文件选择器中的数据发生了变化就要读取并预览
读取并预览 - 借助H5提供的FileReader - 读取文件是异步读取
构造函数需要new

document.querySelector('[type="file"]').onchange = function(){var fr = new FileReader();

readAsArrayBuffer - 将数据读取成一个Buffer数组

var fileinfo = this.files[0]

参数要一个文件对象 - 结果是一个buffer

fr.readAsArrayBuffer(fileinfo)

参数要一个文件对象 - 结果是一个二进制数据 - 适用于多媒体文件

fr.readAsBinaryString(fileinfo)

结果是一个可以当做路径使用的数据 - base64字符串 - 适用于图片

fr.readAsDataURL(fileinfo)

在load事件中,读取完成后获取读取出来的数据
load事件在读取完成的时候触发

fr.onload = function(){
        / result属性是读取出来的内容        / console.log(fr.result);
        / 创建img标签        var img = document.createElement('img')
        img.src = fr.result;
        document.body.appendChild(img)

FileReader读取文件

FileReader也是js内置的一个构造函数,主要功能是用来读取文件,读取文件为异步读取。

var fr = new FileReader()  创建读取对象// 该对象的读取方法:fr.readAsDataUrl(文件信息)  将文件读取为base64字符串 - 通常用于图片文件,读取结果可以作为图片的src使用
fr.readAsArrayBuffer(文件信息)  将文件读取为二进制数据流 - 通常用于多媒体文件
fr.readAsText(文件信息)  将文件读取为字符串 - 通常用于文档文件

对象监听的事件:

abort事件:在读取被中断的时候触发
error事件:读取发生错误的时候触发
load事件:在读取完成的时候触发 - 常用语读取完成后获取数据
loadstart事件:在读取开始的时候触发
loadend事件:在读取结束的时候触发
progress事件:在读取过程中触发

例:

fr.onload = function(){
  读取结果为:对象.result 或 事件对象.target.result
    console.log(fr.result)  此时这个数据就可以作为img的src进行图片预览}

base64是指:小写字母+大写字母+数字+加号+等于号 共64个字符

Jquery上传

data位置就直接写formData就好了

设置一个content-type为false表示jquery不要设置请求头

设置一个processData为false,表示query不要修改数据格式

<form action="javascript:;">
    <input type="file" name="avatar">
    <input type="text" name="username">
    <br>
    <input type="button" value="上传"></form>

我们可以在new的时候,将表单元素放在构造函数中 - 默认能将表单中的数据,添加到这个对象中

$('[type="button"]').click(function()
    var fd = new FormData($('form')[0])

    $.ajax({
        url:"2-upload.php",
        method:"post",
         jquery上传用 FormData
        data:fd,
        contentType:false,  不让jQuery的ajax修改请求头
        processData:false,  不让jquery的ajax编码数据        success:res=>{
            console.log(res);
        }
        
    })})

webWorker

大量运算的代码,可以作为一个异步线程执行
需要将这段代码单独放在一个文件中
需要new一个worker对象 - 这个构造函数需要在服务器环境中运行

woker需要一个事件,当文件完成以后获取里面的数据
可以在事件中,接收到文件中导出的数据

woker.onmessage = function(e){
    数据就在事件对象的data属性中
    console.log(e.data);}

当业务逻辑需要的计算量比较大的时候,同步代码会阻塞下面的代码继续执行,此时需要将这个大计算量的代码另外开辟一个新的线程进行执行,这个线程也是异步执行的,但需要将在新线程中执行的代码单独放在一个js文件中,使用方式:

var w = new Worker(需要异步执行的js文件)

如果在主线程中需要这个线程中返回的数据,在这个线程中使用postMessage来返回:

postMessage(数据)

主线程中接收返回出来的数据:

w.onmessage = function(e){
    e.data // 是异步线程中返回出来的数据}

离线缓存

离线缓存的作用:在马上断网之后,依旧可以访问到缓存下来的文件。比较鸡肋。该技术在2020年8月已经被弃用了。

使用方式:

使用规则        1. 需要你自定义一个 .manifest 文件        2. 再你书写 html 文件的时候
          => 如果这个 html 文件需要缓存规则
          => 再 html 标签上添加一个 manifest 属性
          => 值就写你的缓存规则文件        3. 第一次打开页面的时候
          => 就会按照你书写的缓存规则去缓存文件

例:

第一行必须要写上
CACHE MANIFEST
以注释的形式书写一个版本号
app version 1.0

表示你要缓存的文件
CACHE:
./index.html
./CSS/index.css

表示必须需要网络环境才可以请求的文件
一般我们会书写 星号(*), 表示除了 CACHE 里面书写的文件, 其他的去过没有网络环境就报错
NETWORK:
*

当你再一个离线环境下访问一些没有的页面的时候
使用一个什么内容替代
FALLBACK:

  • ./404.html


事件循环面试题

<script>console.log(1)setTimeout(()=>{ console.log(2) },0) new Promise(resolve=>{
    console.log(3)
    resolve()}).then(()=>{ 
    console.log(4)})setTimeout(()=>{ 
    console.log(5)
    new Promise(resolve=>{
        console.log(6)
        setTimeout(()=>{ 
            console.log(7)
        })
        resolve()
    }).then(()=>{ 
        console.log(8)
    })},500)new Promise(resolve=>{
    console.log(9)
    resolve()}).then(()=>{ 
    console.log(10)
    setTimeout(()=>{ 
        console.log(11)
    },0)})console.log(12)</script>

答案:1 3 9 12 4 10 2 11 5 6 8 7

到此,关于“web前端怎么上传文件”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: web前端怎么上传文件

本文链接: https://www.lsjlt.com/news/88821.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • web前端怎么上传文件
    这篇文章主要介绍“web前端怎么上传文件”,在日常操作中,相信很多人在web前端怎么上传文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”web前端怎么上传文件”的疑惑有所帮...
    99+
    2022-10-19
  • web前端大文件上传与下载问题怎么解决
    这篇文章主要介绍了web前端大文件上传与下载问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇web前端大文件上传与下载问题怎么解决文章都会有所收获,下面我们一起来看看吧。一、问题日常业务中难免出现前端...
    99+
    2023-07-04
  • 前端如何上传图片文件
    效果图html代码js 效果图 效果: 这篇博客必须要后台调用你的js函数,如果后台不打算调用你的js函数可以放弃此篇博客了,或者自己将代码改良。如果后台接受该代码可以参考这篇文...
    99+
    2023-09-24
    前端 javascript php
  • 前端vue+express怎么实现文件的上传下载
    本篇内容主要讲解“前端vue+express怎么实现文件的上传下载”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“前端vue+express怎么实现文件的上传下载”吧!新建server.jsyar...
    99+
    2023-06-22
  • 文件上传(前端JS检测)详解
    文件上传(前端JS检测)详解 function checkFile() { var file = document.getElementsByName('upload_file')[0].val...
    99+
    2023-09-09
    前端 javascript php 代码复审
  • 前端上传文件的示例分析
    这篇文章将为大家详细讲解有关前端上传文件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。零, 基础(知识点主要来源于w3school)(已经熟悉的人直接跳过这一章...
    99+
    2022-10-19
  • PHP 文件上传前后端代码(笔记)
    本笔记中代码运行环境为Wampserver-3.2.9 前端上传文件代码 文件上传文件名: 如果需要保存大文件,需要在后端保存文件前,对php.ini配置文件进行修改 。 第一步、在wampserver文件bin目录中找到对应版本的apac...
    99+
    2023-08-31
    html php
  • golang Gin上传文件返回前端及中间件怎么实现
    这篇文章主要介绍“golang Gin上传文件返回前端及中间件怎么实现”,在日常操作中,相信很多人在golang Gin上传文件返回前端及中间件怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-06-30
  • 怎么进行java web 文件上传
    这篇文章的内容主要围绕怎么进行java web 文件上传进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获! java...
    99+
    2022-10-19
  • CTFHub-Web-文件上传
    目录 知识点 一、无验证 二、前端验证 三、.htaccess 1、题目简介 2、解题思路 3、解题:上传htaccess文件==》上传符合我们重新后规则的文件==》蚁剑连接 四、MIME绕过 1、知识点 2、解题思路  五、文件头检查 六...
    99+
    2023-09-05
    php 安全 开发语言 前端 web安全
  • bugku-web-文件上传
    题目没有太多的描述   简单明了 (它不想要PHP文件) 上传一个其他类型试试看  被拦截了 回想之前我们做过的题目  不可以上传 php文件 说明一共存在三个过滤 请求头部的 Content-Type文件后缀请求数据的Content-...
    99+
    2023-09-13
    php 开发语言 安全 burp 网络
  • TypeScript前端上传文件到MinIO示例详解
    目录什么是MinIO本地Docker部署测试服务器上传的APITypeScript实现1. XMLHttpRequest2. Fetch API3. Axios从后端获取临时上传链接...
    99+
    2022-11-13
    TypeScript前端上传到MinIO TypeScript前端文件上传
  • 前端大文件上传与下载(分片上传)的详细过程
    目录一、问题二、解决1.第一步选择文件2.校验文件是否符合规范3.文件切片上传4.分片上传注意点5.大文件下载总结一、问题 日常业务中难免出现前端需要向后端传输大型文件的情况,这时单...
    99+
    2022-11-13
    前端文件上传和下载 前端上传文件 前端大文件上传
  • 前端使用koa实现大文件分片上传
    目录引言前端拆分上传的文件流后端接收文件片段合并文件片段总结引言 一个文件资源服务器,很多时候需要保存的不只是图片,文本之类的体积相对较小的文件,有时候,也会需要保存音视频之类的大文...
    99+
    2022-11-13
  • 前端vue+express实现文件的上传下载示例
    新建server.js yarn init -y yarn add express nodemon -D var express = require("express"); cons...
    99+
    2022-11-12
  • js前端上传文件缩略图技巧有哪些
    本篇内容介绍了“js前端上传文件缩略图技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!引言通常情况下,前端提交给服务器的数据格式为J...
    99+
    2023-07-05
  • web前端怎么把文字靠右
    在Web前端开发中,对于文字排版的要求也是很高的,有时候需要把一些文字对齐到靠右边,那么如何实现呢?一、CSS属性text-align在CSS中,有一个text-align属性,它表示文字水平对齐方式。text-align有以下取值:lef...
    99+
    2023-05-20
  • ctfshow web入门(文件上传)
    web151 (前端限制) 知识点:修改前端限制 上传时,bp收不到,前端是限制了 修改为php,上传一句话,蚁剑连接 web152(后端限制) 知识点:绕过后端对文件类型限制 后端限制为图片...
    99+
    2023-09-01
    php wp 安全
  • ctf-web入门-文件上传
    Web 151 考点:后端无验证,前端校验 查看源码可以发现只能上传png图片 修改为php 写一个php文件上传一句话木马  可以发现已经成功上传 查看上级目录发现可疑文件  查看flag.php文件内容得出flag    得到...
    99+
    2023-09-16
    前端 xss web安全
  • CTFshow web入门——文件上传
    目录 Web 151考点:后端无验证,前端校验 Web 152考点:绕过前端校验 Web 153考点:文件后缀名,黑名单 Web 154-155考点:文件内容过滤,过滤关键字是ph...
    99+
    2023-10-20
    php web安全 安全
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作