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

怎么做网站一张图华为云建站官网

怎么做网站一张图,华为云建站官网,深圳 购物商城网站建设,网站文件名格式有两个方法需要提前引入 FileUtil(上传文件的方法)、to(对请求接口返回做了二次处理,数据和错误提示等) //FileUtil export namespace FileUtil {const env {timeout: 10000,uploadImageUrl: "阿里云的地址",};const genPolicy …

有两个方法需要提前引入 FileUtil(上传文件的方法)、to(对请求接口返回做了二次处理,数据和错误提示等)

//FileUtil
export namespace FileUtil {const env = {timeout: 10000,uploadImageUrl: "阿里云的地址",};const genPolicy = () => {let date = new Date();date.setHours(date.getHours() + env.timeout);let srcT = date.toISOString();const policyText = {expiration: srcT,conditions: [["content-length-range", 0, 1 * 1024 * 1024 * 1024], // 设置上传文件的大小限制1G],};var rawStr = JSON.stringify(policyText);var wordArray = Utf8.parse(rawStr);var policyBase64 = Base64.stringify(wordArray);return policyBase64;};const genSignature = (policyBase64, accessKey) => {const byte = HmacSHA1(policyBase64, accessKey);const signature = Base64.stringify(byte);return signature;};export const upload = async (fileInfo): Promise<{ url: string; errMsg: string }> => {const { path } = fileInfo;return new Promise(async (resolve) => {const res = await httpRequest({url: "图片上传的接口",method: "POST",});if (res?.code === 200 && res?.data) {const {Credentials: { AccessKeyId, AccessKeySecret, SecurityToken },} = res.data;const aliyunFileKey ="mini_" + new Date().getTime() + path.split("tmp/")[1]; //文件命名const policyBase64 = genPolicy();const signature = genSignature(policyBase64, AccessKeySecret);//小程序直传ossTaro.uploadFile({url: env.uploadImageUrl,filePath: path,name: "file",header: {"Content-Type": "multipart/form-data",},formData: {key: aliyunFileKey,policy: policyBase64,OSSAccessKeyId: AccessKeyId,signature: signature,"x-oss-security-token": SecurityToken, //使用STS签名时必传。success_action_status: "200",},success: function (resp) {if (resp?.statusCode === 200) {resolve({url: env.uploadImageUrl + aliyunFileKey,errMsg: "ok",});} else {resolve({ url: "", errMsg: resp?.errMsg });}},fail: function (err: any) {resolve({ url: "", errMsg: err });},});} else {resolve({ url: "", errMsg: res?.msg });}});};
}
//to
export async function to<T>(promise: Promise<T>): Promise<[Error | null, T]> {if (!promise || !Promise.prototype.isPrototypeOf(promise)) {// @ts-ignorereturn await new Promise((resolve, reject) => {reject(new Error("request promises as ths param"));}).catch((error) => {return [error, null];});}// @ts-ignorereturn await promise.then(function () {// @ts-ignorereturn [null, ...arguments];}).catch((error) => {return [error, null];});
}
import { useState } from "react";
import { FileUtil, to } from "@/utils";
import Taro from "@tarojs/taro";
import { useLoading } from "taro-hooks";interface UseUploadImgProps {maxLength?: number;initList?: string[];
}
export const useUploadImg = ({maxLength = 9,initList = [],
}: UseUploadImgProps) => {const [fileList, setFileList] = useState<string[]>([...initList || []]);const [showLoading, hideLoading] = useLoading({title: "上传中...",mask: true,});const handleUpload: (path: any) => Promise<{ url: string; errMsg: string }> = async (path) => {return FileUtil.upload({ path });};const handleSendImage = async () => {// 选择图片const chooseImgResp = await to(Taro.chooseImage({count: maxLength - fileList?.length,sizeType: ["original"],sourceType: ["album", "camera"],}));if (chooseImgResp[0]) {return;}if (chooseImgResp[1].errMsg !== "chooseImage:ok") {return;}const filesLen = chooseImgResp[1].tempFilePaths?.length;let asyncArr: Promise<{ url: string; errMsg: string }>[] = [];for (let i = 0; i < filesLen; i++) {asyncArr.push(handleUpload(chooseImgResp[1].tempFilePaths[i]));// 获取图片信息}showLoading().then();Promise.all(asyncArr).then((res) => {const upLoadList = res.filter(obj => obj.url !== '').map(item=>item.url);setFileList((val) => [...val, ...upLoadList]);}).catch(() => {Taro.showToast({ title: "上传失败,请重试", icon: "none" });}).finally(() => {hideLoading().then();});};return {handleSendImage,fileList,setFileList,};
};

在页面中使用

import { useUploadImg } from "定义hook的文件地址";
import Taro, { showToast } from "@tarojs/taro";
import { Image, View } from "@tarojs/components";export const UpLoadImg = () => {const { handleSendImage, fileList, setFileList } = useUploadImg({maxLength,}); // 这里就是useUploadImg 输出的方法和上传文件的list<View>{fileList.map((item, index) => (<View key={item}><Imagesrc={item}onClick={() => {if (fileList) {Taro.previewImage({urls: fileList,current: item,});}}}/><Imagesrc={iconDelete}className={styles.imgDelete}onClick={() => {fileList.splice(index, 1);setFileList(() => [...fileList]);}}/></View>))}{fileList.length < maxLength && (<View onClick={() => handleSendImage()}><Image /></View>)}
</View>
})

在这里插入图片描述
在这里插入图片描述

http://www.yayakq.cn/news/183573/

相关文章:

  • 不能访问子目录的网站大型做网站公司
  • 网站建设公众号小程序推广开发成都幕墙设计公司
  • 厦门网站怎么做南阳网站改版
  • mc网站的建设河源市建设规划局网站
  • 晋中企业网站建设公司连云港做网站
  • 南昌网站外包高端网站建设深圳
  • 巡视组 住房与城乡建设部网站电子商务网站建设 试卷
  • 个人网站做电影资源链接犯法吗音乐网站开发需求
  • 珠海做网站优化南京企业做网站
  • 盐城企业做网站多少钱网站前置审批 公司名称
  • 大城网站制作域名访问网站下
  • 做企业网站收费如何用照片做模板下载网站
  • 建设公司网站要注意哪些wordpress 菜单分类
  • 免费招聘网站有哪些平台网站w3c标准
  • 吉安市网站制作传统行业网站建设
  • 北京华诚传媒有限公司官方网站正能量不良网站直接进入免费
  • 网站建设公司网站制作余姚网站推广
  • 网站建设进程表注销公司的步骤和流程
  • 广安建设厅官方网站邢台市信息产业集团有限公司
  • 网站被盗用wordpress分类目录优化
  • 如果有域名和空间怎么做网站台州建站网站模板
  • 素马网站设计公司seo网站布局
  • intellij 网站开发成都丁香人才网官网专区
  • 移动建站平台公司网页制作哪家强
  • 网站建设 迅雷下载网站建设综合推荐
  • 中企动力网站建设新博念 足球网站开发
  • 国外网站做调查平安建设 十户长网站地址
  • 网站建设的作用和用途wordpress 关于我们
  • 哪些网站做翻译可以赚钱线上营销渠道
  • 这么做网站电商网站wordpress