首页 > 其他分享 >前端如何上传文件给服务器

前端如何上传文件给服务器

时间:2023-04-25 16:23:15浏览次数:41  
标签:编码 文件 二进制 前端 Base64 Blob 服务器 上传

上传文件到服务器常用的方法有两种

第一种:将文件转换成base64编码后使用POST上传给服务器

实现方法

URL.createObjectURL(BlobFile)
//或者由canvas生成
canvas.toDataURL('image/jpeg',0.8)

优点:

  1. 可以将二进制文件转换为文本数据进行传输,避免了二进制文件传输可能遇到的编码问题和字节顺序的差异问题,从而提高了兼容性。

  2. Base64 编码后的文本数据相对于二进制数据而言更容易进行文本处理和解析,比如可以直接将其嵌入到 HTML、CSS 或 JavaScript 中,或者将其作为 URL 参数传递。

  3. 在一些低带宽网络环境下,Base64 编码可以通过减小请求的数据量来减少网络带宽的消耗。

缺点

  1. Base64 编码后的数据比原始二进制文件的大小要大 33% 左右,这意味着对于大文件的传输来说,将其转换为 Base64 编码后可能会消耗更多的网络带宽和服务器资源。

  2. 将文件转换为 Base64 编码后会增加 CPU 和内存的负担,因为 Base64 编码需要进行复杂的编码和解码过程。

  3. 在服务器端处理 Base64 编码的数据时需要进行解码,这会增加服务器的负担和数据处理时间。

第二种:将二进制文件直接上传给服务器

实现方法

如果需要把base64编码的文件转换成二进制文件可以参考:
Base64 编码的字符串转换为 Blob 对象方法

let formData = new FormData();
formData.append("file", file.blob());
formData.append("text", "这是一段文字");

axios({
  method: "post",
  url: "/upload",
  headers: { "Content-Type": "multipart/form-data" },
  data: formData,
}).then((response) => {
  console.log(response.data);
});

优点:

  1. Blob 对象表示不可变、原始数据的类文件对象,它通常用于处理二进制数据或大型数据的传输。使用 Blob 对象上传文件可以直接获取文件的二进制数据,而不需要通过一些额外的库或插件来解析文件内容。

  2. 在使用 Blob 对象上传文件时,可以直接将文件对象作为参数传递给 XMLHttpRequest 或 fetch API,从而实现更加简洁的代码编写方式。

  3. Blob 对象上传文件的速度通常较快,因为它直接使用二进制数据进行传输,避免了其他编码方式可能存在的额外的处理时间和计算开销。

缺点:

  1. 使用 Blob 对象上传文件时需要手动设置 Content-Type 等一些 HTTP 头信息,这可能需要开发者在代码中进行额外的设置。

  2. 在使用 Blob 对象上传文件时,需要对文件进行读取和解析,这可能会增加 CPU 和内存的负担,尤其是在处理大型文件时。

  3. 对于不支持 Blob 对象的浏览器或客户端环境,使用 Blob 对象上传文件可能会存在兼容性问题。

标签:编码,文件,二进制,前端,Base64,Blob,服务器,上传
From: https://www.cnblogs.com/mydyxy/p/17352960.html

相关文章

  • 如何建设一个用于编译 iOS App 的 macOS 云服务器集群?
    作者:京东零售叶萌现代软件开发一般会借助CI/CD来提升代码质量、加快发版速度、自动化重复的事情,iOSApp只能在mac机器上编译,CI/CD工具因此需要有一个macOS云服务器集群来执行iOSApp的编译。今天就来谈谈如何建设macOS云服务器集群购买macmini/MacStudio机......
  • 服务器之间实现免密登录的简易教程
    今天这篇文章主要是教会大家如何实现服务器之间的免密登录。1、先在所有服务器上执行命令:ssh-keygen-tdsa-P''-f~/.ssh/id_dsamaster服务器slave1服务器slave2服务器2、而后在所有服务器上执行命令:cat/.ssh/id_dsa.pub>>/.ssh/authorized_keysmaster服务器slave1服务器......
  • python 修改服务器网卡信息
    importosimportreimportnetifacesimportsubprocessclassNetWorkConfig:def__init__(self):pass@staticmethoddefcheck_network_isvalid(ip,netmask,gateway,dns):"""判断用户输入的网络配置是否可用:pa......
  • Hyper-V安装centos系统作为本地服务器教程
    下载CentOS镜像以下是镜像下载地址:https://repo.huaweicloud.com/centos/7.9.2009/isos/x86_64/因为要做服务器使用,所以推荐下CentOS-7-x86_64-Minimal-2009.iso版本。启用Hyper-vwindows系统一般没有默认打开hyper-v功能,需要手动开启。如果已开启请跳过该步骤。按下组合......
  • CentOS 服务器部署 DNS 解析服务
    需求在centos云服务器上部署一个dns解析服务,以供windows电脑可以使用这个服务器ip作为网络的dns代理。我的服务器ip为192.168.126.241,我想在我的windows电脑访问abc.baidu.com时解析到ip为110.112.113.111的服务器上,访问www.baidu.com时解析到123.111.111.111的服务器上。尽量模......
  • ueditor 实现ctrl+v粘贴图片并上传、word粘贴带图片
    ​如何做到ueditor批量上传word图片?1、前端引用代码<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>......
  • 百度ueditor 实现ctrl+v粘贴图片并上传、word粘贴带图片
    ​ 自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了。一般情况下我们将Word内容粘贴到Web编辑器(富文本编辑器)中时,编辑器都无法自动上传图片。需要用户手动一张张上传Word图片。如果只有一张图片还能够接......
  • jenkins流水线发布前端代码
    pipeline{agent{label'hw'}environment{VERSION=sh(script:"echo`date'+%Y%m%d%H%M%S'`",returnStdout:true).trim()}stages{stage('克隆代码'){steps{......
  • 前端使用CryptoJS加密解密
    1、安装crypto-js;npminstallcrypto-js--save-devyarnaddcrypto-js--dev2、新建unit.js写成公共方法;constCryptoJS=require('crypto-js');//16位十六进制数作为密钥(秘钥为随机生成,必须与后端保持一致!)constkey=CryptoJS.enc.Utf8.parse("xxxxxxxxxxxxxx");//......
  • 台湾服务器的优缺点是什么?
    简述台湾服务器与其他亚州服务器有什么区别?为什么香港服务器无法取代台湾服务器?什么业务的人适合使用台湾服务器吗?文章内会情况给大家说明什么是台湾服务器?台湾服务器就是建基于台湾地区的服务器,网络也是采用台湾网络供应商,本地网络供应商对中国网络稳定性很差,到晚上就正......