当前位置: 首页 > wzjs >正文

一家做特卖的网站手机版seo性能优化

一家做特卖的网站手机版,seo性能优化,门户网站开发模板,wordpress-5.0.3解耦的作用在于如果后面要我改成从阿里云oss上传文件,我只需要实现上传逻辑从七牛改成阿里云即可,其他不用动。实现方式有2部分组成,一部分是上传逻辑,一部分是ui。 上传逻辑 大概逻辑就是先去服务端拿上传token和地址&#xff0…

解耦的作用在于如果后面要我改成从阿里云oss上传文件,我只需要实现上传逻辑从七牛改成阿里云即可,其他不用动。实现方式有2部分组成,一部分是上传逻辑,一部分是ui。

上传逻辑

大概逻辑就是先去服务端拿上传token和地址,然后用http上传

import { upload } from "@/api/agent-go";
import { isShowErr } from "..";
import axios from "axios";
import { UploadProgressEvent } from "element-plus";export async function uploadFile(file: File,classType: uploadClassType,onUploadProgress?: (progressEvent: UploadProgressEvent) => void
) {if (!file) throw new Error("上传文件失败:缺少file参数");if (!classType) throw new Error("上传文件失败:缺少classType参数");const [res, err] = await upload({fileList: [{ classType, name: file.name }],});if (isShowErr(err) || !res.tokenList[0]) throw new Error("获取token失败");const token = res.tokenList[0];const formData = new FormData();formData.append("file", file);formData.append("token", token.token);formData.append("key", token.key);const config = {headers: { "Content-Type": "multipart/form-data" },onUploadProgress: function (progressEvent) {// 处理上传进度const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);progressEvent.percent = percentCompleted;if (onUploadProgress) onUploadProgress(progressEvent);},};const response = await axios.post(res.addr, formData, config);return response.data.key; // 返回上传的文件key,如果没有response.data.key,则上传失败
}

UI层

关键就是重写http-request用上我们上面写的上传逻辑

<template><el-uploadref="uploadRef"style="width: 100%":before-upload="beforeUpload":http-request="filehandleFileUpload":on-exceed="handleExceed":on-preview="handlePreview":limit="limit"v-model:file-list="fileList"drag><el-icon class="el-icon--upload"><upload-filled /></el-icon><div class="el-upload__text"><em>点击</em>或将文件<em>拖拽</em>到这里上传<div class="el-upload__tip">{{ text }}</div></div><template #tip> </template><ImageViewer ref="imageViewerRef" /></el-upload>
</template><script setup lang="ts">
import { PropType, ref, watch } from "vue";
import { ElMessage, UploadInstance, genFileId } from "element-plus";
import { uploadFile } from "@/utils/upload";
import {UploadRawFile,UploadRequestOptions,UploadUserFile,
} from "element-plus/es/components";
import { isShowErr } from "@/utils";
import { OssFile, download } from "@/api/agent-go";
import { onMounted } from "vue";
import ImageViewer from "@/components/ImageViewer/index.vue";interface UploadOssFile extends UploadRawFile {ossFileData?: OssFile;
}const props = defineProps({ossFileList: {type: Array as PropType<OssFile[]>,default: () => [],},text: {type: String,default: "请上传excel文件",},whiteList: {type: Array as PropType<string[]>,default: () => ["xls", "xlsx"],},classType: {type: String as PropType<uploadClassType>,default: "temp",},limit: {type: Number,default: 1,},
});const uploadRef = ref<UploadInstance>();
const fileList = ref<UploadUserFile[]>([]);watch(() => props.ossFileList,() => {setValue(props.ossFileList);},{immediate: true,}
);function setValue(val: OssFile[]) {fileList.value = val.map((item) => {const file = new File([], item.name) as UploadOssFile;file.ossFileData = item;file.uid = genFileId();return {name: item.name,status: "success",raw: file,};});
}const filehandleFileUpload = async (options: UploadRequestOptions) => {const key = await uploadFile(options.file, props.classType, (e) => {options.onProgress(e);});const params: OssFile = {name: options.file.name,size: options.file.size,classType: props.classType,mimeType: options.file.type,key,};const file = options.file as UploadOssFile;if (file.ossFileData) file.ossFileData.key = key;//ossFilemap.set(options.file.uid, params);return params;
};const handleExceed = (files) => {if (props.limit > 1) {if (fileList.value.length >= props.limit) {ElMessage({type: "error",message: `最多上传${props.limit}个文件, 请删除后再上传`,});return false;}return;}uploadRef.value!.handleRemove(fileList.value[0] as UploadRawFile);const file = files[0] as UploadRawFile;file.uid = genFileId();uploadRef.value!.handleStart(file);uploadRef.value!.submit();
};const imageViewerRef = ref();
const handlePreview = async (file) => {try {const fileSuffix = file.name.substring(file.name.lastIndexOf("."))?.toLowerCase();const isPictures = [".jpg", ".jpeg", ".png", ".gif"].includes(fileSuffix);const [res, err] = await download({fileList: [file.raw.ossFileData as OssFile],method: isPictures ? "default" : "download",});if (isShowErr(err)) return;const map = res.urlMap;const urls = Object.keys(map)?.map((key) => map[key]?.url);if (!urls || urls.length === 0)return ElMessage.error("下载文件失败, 获取不到文件地址");if (isPictures) {imageViewerRef.value.openViewer(0, urls);} else {// 创建一个隐藏的可下载链接const url = urls[0] || "";const link = document.createElement("a");link.href = url;link.setAttribute("download", file.name); // 设置下载后的文件名document.body.appendChild(link);link.click(); // 模拟点击事件触发下载document.body.removeChild(link); // 清理临时元素}} catch (error) {alert("下载文件失败:" + error);}
};const beforeUpload = (file: UploadOssFile) => {//console.log("beforeUpload", file);file.ossFileData = {name: file.name,size: file.size,classType: props.classType,mimeType: file.type,};const isAnyType = props.whiteList.indexOf("*") != -1;const fileSuffix = file.name.substring(file.name.lastIndexOf(".") + 1);const isSuffix = props.whiteList.indexOf(fileSuffix.toLowerCase()) === -1;const isLt = file.size / 1024 / 1024 > 10;let msg;if (isSuffix && !isAnyType) {msg = "上传文件只能是 " + props.whiteList.join(",") + " 格式";}if (isLt) {msg = "上传文件大小不能超过 10MB";}if (msg) {ElMessage({type: "error",message: msg,});return false;}
};function getValue() {const val: OssFile[] = [];let valid = true;fileList.value.forEach((item) => {if (item.status === "uploading" || item.status === "ready") {ElMessage({type: "error",message: "有文件正在上传中,请稍后再试",});valid = false;return;}if (item.status === "fail") {ElMessage({type: "error",message: "有文件上传失败,请重新上传",});valid = false;return;}const file = item.raw as UploadOssFile;if (file.ossFileData) val.push(file.ossFileData);});if (!valid) {throw new Error("文件上传中或上传失败");}return val;
}defineExpose({getValue,
});
</script>
<style lang="scss" scoped></style>

http://www.dtcms.com/wzjs/354710.html

相关文章:

  • 如何制作自己网站宁波网络推广产品服务
  • 那些网站专门做游戏辅助的seo长尾快速排名
  • 濮阳做网站的公司有哪些aso优化{ }贴吧
  • 群晖nas做网站域名温州网站建设开发
  • 过年做哪个网站能致富百度怎么做广告
  • 扬州鼎盛开发建设有限公司网站推广运营
  • 如何破解wordpress隐藏文件拼多多关键词怎么优化
  • 杭州 电子商务网站建设谷歌seo网站优化
  • 阿里巴巴网站被关闭了要怎么做咨询公司
  • 纹身网站建设如何找客户资源
  • win10如何部署自己做的网站seo投放
  • 宿州做网站的公司有哪些2024小学生时事新闻十条
  • 西安便宜网站建设培训班报名
  • wordpress 不要动态链接seo优化网站技术排名百度推广
  • 少儿编程加盟机构seo管理是什么
  • 英德网站建设搜狗推广登录平台官网
  • 我的世界查找建筑网站推广代理
  • 青岛做公司网站的公司河北百度seo关键词排名
  • 网站建设团队技术介绍长沙网站包年优化
  • 深圳保障性住房统一轮候信息系统谷歌seo推广招聘
  • postgresql做网站用什么环境搜索引擎优化的主要内容
  • 做网站南宁台州seo排名优化
  • 秦皇岛建网站网络销售工资一般多少
  • 网站设计的要求有哪些seo短视频网页入口引流免费
  • 广州做网站推广公司酒店机票搜索量暴涨
  • 建筑资料下载网天津百度网站快速优化
  • 电商网站为什么要提高网站友好度数据分析师需要学哪些课程
  • 做公众号的素材网站免费网站优化排名
  • 蓝田网站建设seo高效优化
  • 网站改版建设征求意见书东莞网站建设推广公司