element-ui 图片(图片压缩)与文件上传设置【添加请求头信息】

1.图片上传

<template><div><el-upload class="avatar-uploader" :action="upload + '/Api/upload'" :show-file-list="false" :on-success="upSuccess":before-upload="beforeAvatarUpload" :on-exceed="handleExceed" :on-preview="handlePreview" :disabled="disabled":before-remove="beforeRemove" accept="image/*" :headers="headers"><img v-if="fileList" :src="mubanurl + fileList" class="avatar" :style="{ width: width, height: height }"><i v-else class="el-icon-plus avatar-uploader-icon" :style="{ width: width, height: height }"></i></el-upload><div>能上传图片类型:'jpg', 'jpeg', 'png', 'gif' , 图片大小: 10M ( 规格:150*50</div></div>
</template>
<script>
import { upload, mubanurl } from '@/api/common.js'
import CryptoJS from '@/assets/js/hash.js'
import {compressImgNew
} from "@/assets/js/picture.js";
export default {data() {return {upload: upload,mubanurl: mubanurl,fileList: '',headers: {},}},props: {limit: {type: Number,default: 1,},uploadtype: {type: String,default: 'image',},showfilelist: {type: Boolean,default: true,},width: {type: String,default: '80px',},height: {type: String,default: '80px',},disabled: {type: Boolean,default: false,},},mounted() {},computed: {},methods: {upSuccess(res, file) {this.fileList = ''if (res.code == 0) {this.fileList = res.data.filepaththis.$emit('upload_file', res.data.filepath)this.$message.success(res.message);} else {this.$message.error(res.message);return}},beforeAvatarUpload(file) {let types = ["image/jpeg","image/jpg","image/png"];const isImage = types.includes(file.type);const isLtSize = file.size / 1024 / 1024 < 5;if (!isImage) {this.$message.warning("上传图片只能是 JPG、JPEG、PNG 格式!");return false;}if (!isLtSize) {this.$message.warning("上传图片大小不能超过 5MB!");return false;}// 获取当前日期var currentDate = new Date();// 格式化日期为 'YYYY-MM-DD' 格式var formattedDate = currentDate.getFullYear() + '-' +String(currentDate.getMonth() + 1).padStart(2, '0') + '-' +String(currentDate.getDate()).padStart(2, '0');var password = CryptoJS.MD5("li-tong-gas-" + formattedDate);// 使用示例// var password = "bd557960c173bdaf7a9df9e7fa55a4a8";var hashedPassword = this.hashPassword(password);this.headers = {"x-api-key": hashedPassword,"token": localStorage.getItem("admintoken")}return compressImgNew(file);},hashPassword(password) {var salt = CryptoJS.lib.WordArray.random(16); // 生成随机盐var hash = CryptoJS.SHA256(password + salt); // 使用 SHA256 算法对密码和盐进行哈希var hashWithSalt = salt.toString() + hash.toString(); // 将盐和哈希值连接起来return hashWithSalt;},handlePreview(file) {console.log(file, '点击查看');},handleExceed(files, fileList) {this.$message.warning(`当前限制选择 ${this.limit} 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);},beforeRemove(file, fileList) {return this.$confirm(`确定移除 ${file.name}`);},},
}
</script>
<style lang='less' scoped>
.avatar-uploader .el-upload {border: 1px dashed #d9d9d9;border-radius: 6px;cursor: pointer;position: relative;overflow: hidden;
}.avatar-uploader .el-upload:hover {border-color: #409EFF;
}.avatar-uploader-icon {font-size: 28px;color: #8c939d;// width: 80px;// height: 80px;// line-height: 80px;// text-align: center;display: flex;justify-content: center;align-items: center;
}.avatar {width: 80px;height: 80px;display: flex;justify-content: center;align-items: center;
}
</style>

1.1 图片压缩文件

   // "crypto-js": "^4.2.0",
import CryptoJS from 'crypto-js';// 图片压缩
export const compressImgNew = (file) => {return new Promise(resolve => {const reader = new FileReader()const image = new Image()image.onload = (imageEvent) => {const canvas = document.createElement('canvas') // 创建画布const context = canvas.getContext('2d')         // 画布为2dconst width = image.width / 1.05        // 图片宽度 / 压缩比例const height = image.height / 1.05        // 图片高度 / 压缩比例canvas.width = width                            // 画布宽度canvas.height = height                          // 画布宽度context.clearRect(0, 0, width, height)context.drawImage(image, 0, 0, width, height)const dataUrl = canvas.toDataURL(file.type)     //图片转路径const blobData = dataURLtoBlob(dataUrl, file.type) //图片转二进制resolve(blobData)}reader.onload = e => { image.src = e.target.result }reader.readAsDataURL(file)})
};//图片转二进制
function dataURLtoBlob(dataURL, type) {var binary = atob(dataURL.split(',')[1])var array = []for (var i = 0; i < binary.length; i++) {array.push(binary.charCodeAt(i))}return new Blob([new Uint8Array(array)], { type: type })
}// 登录加密
export function encrypt(data) {let key = MD5(process.env.VUE_APP_BASE_KEY)// key = MD5('wu-jie-de-you-xi-dev')var x = 0var len = data.lengthvar l = data.lengthvar char = ''var str = ''for (var i = 0; i < len; i++) {if (x === l) {x = 0}char += key.charAt(x)x++}for (var j = 0; j < len; j++) {str += String.fromCharCode(data.charCodeAt(j) + (char.charCodeAt(j) % 256))}return btoa(str)
}function MD5(data) {const hashedPassword = CryptoJS.MD5(data).toString()return hashedPassword
}

2.文件上传

<template><div><!-- :file-list="fileList" :limit="limit" --><el-uploadclass="upload-demo":action="upload + '/Api/uploadFile'":on-preview="handlePreview":disabled="disabled":on-remove="handleRemove":before-remove="beforeRemove"multiple:on-exceed="handleExceed":on-success="upSuccess":before-upload="beforeAvatarUpload":show-file-list="false":file-list="fileList":headers="headers"><el-button size="mini" type="primary">点击上传</el-button></el-upload><div>能上传文件类型:xlsx ,word ,Excel ,图片 ,pdf文件大小: 20M</div></div>
</template>
<script>
import { upload, mubanurl } from "@/api/common.js";
import CryptoJS from "@/assets/js/hash.js";
export default {data() {return {upload: upload,mubanurl: mubanurl,url: "",srcList: [],// headers: {},};},props: {limit: {type: Number,default: 1,},uploadtype: {type: String,default: "image",},// 编辑数据fileList: {type: Array,default: () => [],},showfilelist: {type: Boolean,default: true,},disabled: {type: Boolean,default: false,},},mounted() {},computed: {headers() {// 获取当前日期var currentDate = new Date();// 格式化日期为 'YYYY-MM-DD' 格式var formattedDate =currentDate.getFullYear() +"-" +String(currentDate.getMonth() + 1).padStart(2, "0") +"-" +String(currentDate.getDate()).padStart(2, "0");var password = CryptoJS.MD5("li-tong-gas-" + formattedDate);// 使用示例// var password = "bd557960c173bdaf7a9df9e7fa55a4a8";var hashedPassword = this.hashPassword(password);let obj = {"x-api-key": hashedPassword,token: localStorage.getItem("admintoken"),};return obj;},},methods: {upSuccess(res, file) {if (res.code == 0) {this.$emit("upload_file", {fileurl: res.data.filepath,name: file.name,});} else {this.$message.error(res.message);return;}// this.imageUrl = URL.createObjectURL(file.raw);},beforeAvatarUpload(file) {// 文件限制: 'doc', 'xls', 'xlsx', 'pdf', 'ppt', 'pptx', 'docx'  文件大小: 20Mconst filesize = file.size / 1024 / 1024;if (filesize > 20) {this.$message.error("上传图片大小不能超过 20MB!");return;}// this.headers = {//   "x-api-key": hashedPassword,//   token: localStorage.getItem("admintoken"),// };// console.log(this.headers, 123);return file;},hashPassword(password) {var salt = CryptoJS.lib.WordArray.random(16); // 生成随机盐var hash = CryptoJS.SHA256(password + salt); // 使用 SHA256 算法对密码和盐进行哈希var hashWithSalt = salt.toString() + hash.toString(); // 将盐和哈希值连接起来return hashWithSalt;},handleRemove(file, fileList) {let ary = [];fileList.forEach((it) => {ary.push(it.response.data.filepath);});// this.$emit('upload_file_clear', ary)},handlePreview(file) {console.log(file, "点击查看");},handleExceed(files, fileList) {this.$message.warning(`请删除之前上传的文件后,再继续上传!`);},beforeRemove(file, fileList) {return this.$confirm(`确定移除 ${file.name}`);},},
};
</script>
<style lang="less" scoped>
.avatar-uploader .el-upload {border: 1px dashed #d9d9d9;border-radius: 6px;cursor: pointer;position: relative;overflow: hidden;
}.avatar-uploader .el-upload:hover {border-color: #409eff;
}.avatar-uploader-icon {font-size: 28px;color: #8c939d;width: 178px;height: 178px;line-height: 178px;text-align: center;
}.avatar {width: 178px;height: 178px;display: block;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/9379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年想要开一家抖音小店,需要多少钱?一篇详解!

大家好&#xff0c;我是电商糖果 随着抖音卖货的持续火爆&#xff0c;抖音小店也成了电商行业讨论度最大的项目之一。 不少朋友都想知道&#xff0c;如果今年开抖音小店大概需要多少钱。 糖果做小店的时间也比较长&#xff0c;也经营了多家小店。 对于开一家抖音小店需要多…

MADbench2

MADbench2 MADbench2是一款用于测试大规模并行架构的I/O、通信和计算子系统在真实科学应用压力下的综合性能的工具。 MADbench2 基于 MADspec 代码&#xff0c;该代码根据天空的噪声像素化图及其像素-像素噪声相关矩阵计算宇宙微波背景辐射的最大似然角功率谱。MADbench2 保留…

多规格产品应该如何设置呢?

今天一用户从供应商手中拿到产品价目表&#xff0c;但是设置起来蒙圈了&#xff0c;接下来我们就一起设置一下吧&#xff5e; 一、产品价格表 我们通过供应商手中拿到产品价目表是这个样子的&#xff1a; 我们可以看到此产品的销售客价根据不同地区导致的价格不同&#xff0…

ABAP小技巧汇总(自用)

1.TIMESTAMP搜索帮助 PARAMETERS:p_begin TYPE ty_screen-date_begiu MATCHCODE OBJECT cpe_timestamp, "开始时间戳p_end TYPE ty_screen-date_end MATCHCODE OBJECT cpe_timestamp. "结束时间戳 效果&#xff1a;

Git笔记-常用指令

Git笔记-常用指令 一、概述二、仓库管理二、缓存区操作1. 添加文件到缓存区2. 取消缓存文件3. 忽略列表 三、日志状态信息四、分支操作五、六、 一、概述 这里记录一些git常用的指令。 二、仓库管理 # 本地仓库初始化 git init# 克隆仓库 git clone git_url # git clone ht…

深入剖析Java的“幽灵之手“:NullPointerException的原因、解决与创意思考

1. 原因分析 java.lang.NullPointerException&#xff08;简称NPE&#xff09;是Java程序员在编程过程中经常会遇到的“幽灵之手”&#xff0c;它在毫无预警的情况下出现&#xff0c;让程序崩溃。NPE的根源在于尝试访问或修改一个null对象的成员或方法。以下是NPE出现的几个常…

怎么选择适合Selenium使用的网络代理

Selenium可以让你使用所有主流浏览器&#xff0c;访问你想测试的任何网站或服务。这种多功能性使 Selenium 不仅在测试方面不可或缺。例如&#xff0c;你可以将 Selenium 与 Python 结合使用&#xff0c;对网站进行搜刮。当然&#xff0c;为了不被拦截&#xff0c;你需要一个代…

2024数维杯数学建模竞赛B题完整思路代码和论文分析

2024数维杯数学建模B题完整代码和成品论文已更新&#xff0c;获取↓↓↓↓↓ https://www.yuque.com/u42168770/qv6z0d/bgic2nbxs2h41pvt?singleDoc# 2024数维杯数学建模竞赛B题完整思路代码论文分析如下&#xff1a; 问题分析 问题(1):分析正己烷不溶物(INS)对热解产率的…

win11个性化锁屏界面怎么关闭?

win11个性化锁屏界面关闭方法对于win11用户来说&#xff0c;关闭个性化锁屏界面是一个常见问题。本文将由php小编苹果详细介绍如何执行此操作&#xff0c;分步指导并提供操作截图。继续阅读以了解具体步骤。 win11个性化锁屏界面关闭方法 第一步&#xff0c;点击底部Windows图…

2024数维杯数学建模竞赛A题完整思路代码论文分析

2024数维杯数学建模A题完整代码和成品论文获取↓↓↓↓↓ https://www.yuque.com/u42168770/qv6z0d/bgic2nbxs2h41pvt?singleDoc# 2024数维杯数学建模竞赛A题完整思路代码论文分析如下&#xff1a; 问题分析 对A题4个小问题的分析如下: 第一个小问题的分析: 这一问题要求…

知识付费 管理系统,专业技术课程讲解视频怎么制作?制作事项有几条?

现在的网络课程&#xff0c;分为专业和非专业的两种&#xff0c;专业的就是要提供硬性技术的&#xff0c;如果是值了的老师&#xff0c;要制作专业技术课程讲解视频&#xff0c;那需要怎么制作?因为&#xff0c;专业课程的要求更为的严苛&#xff0c;所以&#xff0c;老师们也…

python数据分析常用基础语法

Python语言基础——语法基础 前言一、变量的介绍与使用变量的介绍变量命名规则变量的使用拓展 二、标识符标识符命名命名规则注意事项 三、数据类型数据类型的介绍数据类型的查看示例 四、输入与输出输入和输出的介绍format格式化输出占位符 五、代码缩进与注释代码缩进 前言 …

vue3 JSX的使用与警告【JSX 元素隐式具有类型 “any“,因为不存在接口 “JSX.IntrinsicElements“】解决办法

一、安装 pnpm i vitejs/plugin-vue-jsx -D 二、配置 1、tsconfig.json "compilerOptions":{"jsx":"preserve" } 2、vite.config.ts import VueJsx from "vitejs/plugin-vue-jsx"...plugin:[vue(),VueJsx() ] 三、简单使用案例…

【TypeScript函数简介以及使用方法】

TypeScript 是一种 JavaScript 的超集&#xff0c;添加了静态类型系统和其他 ES6&#xff08;以及更多&#xff09;功能。在 TypeScript 中&#xff0c;函数是非常重要的构建块&#xff0c;它们允许你组织代码并执行特定的任务。 TypeScript 函数简介 在 TypeScript 中&#…

【论文速读】| LLM4FUZZ:利用大语言模型指导智能合约的模糊测试

本次分享论文&#xff1a;LLM4FUZZ: Guided Fuzzing of Smart Contracts with Large Language Models 基本信息 原文作者&#xff1a;Chaofan Shou, Jing Liu, Doudou Lu, Koushik Sen 作者单位&#xff1a;加州大学伯克利分校&#xff0c;加州大学欧文分校&#xff0c;Fuzz…

计算机网络-DHCPv6配置

DHCPv6实验配置 一、DHCPv6有状态配置 拓扑图&#xff1a; 请求报文 回复报文中的信息 配置&#xff1a; # 全局启用ipv6 ipv6 # 启用DHCP dhcp enable# 创建dhcpv6的地址池 dhcpv6 pool pool1address prefix 2001::/64excluded-address 2001::10dns-server 2001:4860:4860::8…

【新版系统架构】知识点背诵默写本

前言 系统架构考试在即&#xff0c;想要考试的人肯定感受到了沉甸甸的压力和紧迫感&#xff0c;脑海中不断闪过知识点的画面&#xff0c;却让人有些头昏脑胀&#xff0c;发现很难完全记住&#xff0c;这个考试很难&#xff0c;知识点很多。这次我在准备考试的同时&#xff0c;…

【全开源】Java同城预约月嫂服务上门服务本地服务源码APP+小程序+公众号+H 5

智能匹配与推荐&#xff1a;源码运用先进的算法和定位技术&#xff0c;根据用户的需求和地理位置&#xff0c;智能匹配并推荐附近的合适月嫂。这种匹配不仅基于地理位置&#xff0c;还考虑了月嫂的技能、经验、评价等因素&#xff0c;确保服务的质量和可靠性。 在线预约与支付…

基于Java+SpringBoot+Vue前后端分离教学资源共享平台系统

基于JavaSpringBootVue前后端分离教学资源共享平台系统 &#x1f345; 作者主页 网顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统…

Meta最新成果:前所未有的加速Emu推理 | Imagine Flash:新型蒸馏框架发布

文章地址&#xff1a;https://arxiv.org/pdf/2405.05224 扩散模型是一个强大的生成框架&#xff0c;但推理过程非常昂贵。现有的加速方法通常会在极低步骤情况下牺牲图像质量&#xff0c;或者在复杂条件下失败。这项工作提出了一个新颖的蒸馏框架&#xff0c;旨在通过仅使用一…