最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

tdesign的文件上傳功能實(shí)現(xiàn)(微信小程序+idea的springboot)

 更新時(shí)間:2023年09月21日 09:27:40   作者:素心如月椏  
這篇文章主要介紹了tdesign的文件上傳(微信小程序+idea的springboot)的相關(guān)知識(shí),本文通過圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

1. springboot后端

1.1 FileController.java

 如上圖可以看到,微信小程序的請(qǐng)求url要傳來一個(gè)type值,

controller全部代碼如下,直接復(fù)制粘貼就行:

package com.huashang.controller;
import com.huashang.common.BaseController;
import com.huashang.service.IFileService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
@RestController
public class FileController extends BaseController {
	@Resource
	private IFileService fileService;
	@RequestMapping(value = "/files/{type}", method = RequestMethod.POST)
	public String uploadFile(@PathVariable String type ,HttpServletRequest request) throws Exception {
		return fileService.uploadFiles(request, type);
	}
}

 1.2 listener文件的ErpApplicationListener.java

1.3  【重點(diǎn)!】FileServiceImpl層

package com.huashang.serviceImpl;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.MultiValueMap;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.huashang.common.Constants;
import com.huashang.model.Alioss;
import com.huashang.service.IFileService;
import cn.hutool.core.date.DateUtil;
@Service
public class FileServiceImpl implements IFileService {
    private Alioss alioss;
    private final static List<String> FILE_TYPE = Arrays.asList("product", "biz", "color", "qa", "mes_qa", "oa", "model");
    @Autowired
    public void setAlioss(Alioss alioss) {
        this.alioss = alioss;
    }
    public static OSSClient ossClient;
    private final static Logger logger = LoggerFactory.getLogger(FileServiceImpl.class);
    @Override
    public void initClient() {
        // 實(shí)例化客戶端
        logger.info("**************************初始化阿里云文件上傳服務(wù)服務(wù)端--START****************************");
        ossClient = new OSSClient(alioss.getEndpoint(), alioss.getAccessKeyId(), alioss.getAcceddKeySecret());
        logger.info("**************************初始化阿里云文件上傳服務(wù)服務(wù)端--END****************************");
    }
    @Transactional
    @Override
    public String uploadFiles(HttpServletRequest request, String type) throws IOException {
        String picUrl = "";
        if (request instanceof MultipartHttpServletRequest) {
            MultiValueMap<String, MultipartFile> multiMap = ((MultipartHttpServletRequest) request).getMultiFileMap();
            Set<String> keys = multiMap.keySet();
            for (String key : keys) {
                List<MultipartFile> mutiFiles = multiMap.get(key);
                for (int i = 0; i < mutiFiles.size(); i++) {
                    if (!FILE_TYPE.contains(type)) {
                        return "可以上傳的文件類型:" + FILE_TYPE.toString();
                    }
                    MultipartFile file = mutiFiles.get(i);
                    String originalFilename = this.getFileOldName(file);
                    LocalDate now = LocalDate.now();
                    String dir = type + "/" + now.getYear() + "/" + now.getMonthValue() + "/" + now.getDayOfMonth() + "/";
                    String path = dir + originalFilename;
                    try {
                        ossClient.putObject(alioss.getBucketName(), path, mutiFiles.get(i).getInputStream());
                    } catch (OSSException | ClientException | IOException e) {
                        e.printStackTrace();
                    }
                    if (mutiFiles.size() - i == 1) {
                        picUrl += "https://" + alioss.getUrl() + "/" + path;
                    } else {
                        picUrl += "https://" + alioss.getUrl() + "/" + path + ",";
                    }
                }
            }
        }
        return picUrl;
    }
    @Override
    public String uploadTmpFile(String filePath, String fileName) throws FileNotFoundException {
        StringBuilder dirBuilder = new StringBuilder("tmp/");
        dirBuilder.append(DateUtil.format(new Date(), Constants.DATE_yyyyMMdd)).append("/");
        StringBuilder fileLinkBuilder = new StringBuilder();
        fileLinkBuilder.append("https://").append(alioss.getUrl()).append("/").append(dirBuilder.toString()).append(fileName);
        ossClient.putObject(alioss.getBucketName(), dirBuilder.toString() + fileName, new FileInputStream(filePath + fileName));
        return fileLinkBuilder.toString();
    }
    private String getFileOldName(MultipartFile file) {
        return Objects.requireNonNull(file.getOriginalFilename()).replaceAll("[^a-zA-Z0-9.]", "^_^");
    }
}

以下代碼不要直接復(fù)制粘貼到serviceImpl層,是原始代碼,需要修改并添加一個(gè)引用才能使用

package com.huashang.serviceImpl;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import com.huashang.util.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.MultiValueMap;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.huashang.common.Constants;
import com.huashang.model.Alioss;
import com.huashang.service.IFileService;
import cn.hutool.core.date.DateUtil;
@Service
public class FileServiceImpl implements IFileService {
    private Alioss alioss;
    private final static List<String> FILE_TYPE = Arrays.asList("product", "biz", "color", "qa", "mes_qa", "oa", "model");
    @Autowired
    public void setAlioss(Alioss alioss) {
        this.alioss = alioss;
    }
    public static OSSClient ossClient;
    private final static Logger logger = LoggerFactory.getLogger(FileServiceImpl.class);
    @Override
    public void initClient() {
        // 實(shí)例化客戶端
        logger.info("**************************初始化阿里云文件上傳服務(wù)服務(wù)端--START****************************");
        ossClient = new OSSClient(alioss.getEndpoint(), alioss.getAccessKeyId(), alioss.getAcceddKeySecret());
        logger.info("**************************初始化阿里云文件上傳服務(wù)服務(wù)端--END****************************");
    }
    @Transactional
    @Override
    public String uploadFiles(HttpServletRequest request, String type) throws IOException {
        if(StringUtil.stringBlank(type)){
            throw new RuntimeException("type must not be empty");
        }
        if(!Arrays.asList("user", "house", "project").contains(type)){
            throw new RuntimeException("type is not supported");
        }
        StringBuilder picUrl = new StringBuilder();
        if (request instanceof MultipartHttpServletRequest) {
            MultiValueMap<String, MultipartFile> multiMap = ((MultipartHttpServletRequest) request).getMultiFileMap();
            Set<String> keys = multiMap.keySet();
            for (String key : keys) {
                List<MultipartFile> mutiFiles = multiMap.get(key);
                for (int i = 0; i < mutiFiles.size(); i++) {
                    String fileOldName = StringUtil.getFileOldName(mutiFiles.get(i));
                    String fileName = StringUtil.randomString(20) + fileOldName;
                    String dir = type + "/" + DateUtil.format(new Date(), "yyMMddHH") + "/";
                    String path = dir + fileName;
                    try {
                        ossClient.putObject(alioss.getBucketName(), path, mutiFiles.get(i).getInputStream());
                    } catch (OSSException | ClientException | IOException e) {
                        e.printStackTrace();
                    }
                    if (mutiFiles.size() - i == 1) {
                        picUrl.append("https://").append(alioss.getUrl()).append("/").append(path);
                    } else {
                        picUrl.append("https://").append(alioss.getUrl()).append("/").append(path).append(",");
                    }
                }
            }
        }
        return picUrl.toString();
    }
    @Override
    public String uploadTmpFile(String filePath, String fileName) throws FileNotFoundException {
        StringBuilder dirBuilder = new StringBuilder("tmp/");
        dirBuilder.append(DateUtil.format(new Date(), Constants.DATE_yyyyMMdd)).append("/");
        StringBuilder fileLinkBuilder = new StringBuilder();
        fileLinkBuilder.append("https://").append(alioss.getUrl()).append("/").append(dirBuilder.toString()).append(fileName);
        ossClient.putObject(alioss.getBucketName(), dirBuilder.toString() + fileName, new FileInputStream(filePath + fileName));
        return fileLinkBuilder.toString();
    }
}

接下來教大家怎么修改文件

 看不清楚沒關(guān)系,如下圖片是你唯一需要修改的地方

以下代碼直接復(fù)制粘貼到FileServiceImpl

package com.huashang.serviceImpl;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import com.huashang.util.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.MultiValueMap;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.huashang.common.Constants;
import com.huashang.model.Alioss;
import com.huashang.service.IFileService;
import cn.hutool.core.date.DateUtil;
@Service
public class FileServiceImpl implements IFileService {
    private Alioss alioss;
    private final static List<String> FILE_TYPE = Arrays.asList("product", "biz", "color", "qa", "mes_qa", "oa", "model");
    @Autowired
    public void setAlioss(Alioss alioss) {
        this.alioss = alioss;
    }
    public static OSSClient ossClient;
    private final static Logger logger = LoggerFactory.getLogger(FileServiceImpl.class);
    @Override
    public void initClient() {
        // 實(shí)例化客戶端
        logger.info("**************************初始化阿里云文件上傳服務(wù)服務(wù)端--START****************************");
        ossClient = new OSSClient(alioss.getEndpoint(), alioss.getAccessKeyId(), alioss.getAcceddKeySecret());
        logger.info("**************************初始化阿里云文件上傳服務(wù)服務(wù)端--END****************************");
    }
    @Transactional
    @Override
    public String uploadFiles(HttpServletRequest request, String type) throws IOException {
        if(StringUtil.stringBlank(type)){
            throw new RuntimeException("type must not be empty");
        }
        if(!Arrays.asList("user", "house", "project").contains(type)){
            throw new RuntimeException("type is not supported");
        }
        StringBuilder picUrl = new StringBuilder();
        if (request instanceof MultipartHttpServletRequest) {
            MultiValueMap<String, MultipartFile> multiMap = ((MultipartHttpServletRequest) request).getMultiFileMap();
            Set<String> keys = multiMap.keySet();
            for (String key : keys) {
                List<MultipartFile> mutiFiles = multiMap.get(key);
                for (int i = 0; i < mutiFiles.size(); i++) {
                    String fileOldName = StringUtil.getFileOldName(mutiFiles.get(i));
                    String fileName = StringUtil.randomString(20) + fileOldName;
                    String dir = type + "/" + DateUtil.format(new Date(), "yyMMddHH") + "/";
                    String path = dir + fileName;
                    try {
                        ossClient.putObject(alioss.getBucketName(), path, mutiFiles.get(i).getInputStream());
                    } catch (OSSException | ClientException | IOException e) {
                        e.printStackTrace();
                    }
                    if (mutiFiles.size() - i == 1) {
                        picUrl.append("https://").append(alioss.getUrl()).append("/").append(path);
                    } else {
                        picUrl.append("https://").append(alioss.getUrl()).append("/").append(path).append(",");
                    }
                }
            }
        }
        return picUrl.toString();
    }
    @Override
    public String uploadTmpFile(String filePath, String fileName) throws FileNotFoundException {
        StringBuilder dirBuilder = new StringBuilder("tmp/");
        dirBuilder.append(DateUtil.format(new Date(), Constants.DATE_yyyyMMdd)).append("/");
        StringBuilder fileLinkBuilder = new StringBuilder();
        fileLinkBuilder.append("https://").append(alioss.getUrl()).append("/").append(dirBuilder.toString()).append(fileName);
        ossClient.putObject(alioss.getBucketName(), dirBuilder.toString() + fileName, new FileInputStream(filePath + fileName));
        return fileLinkBuilder.toString();
    }
}

 1.4 IFileService

package com.huashang.service;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
public interface IFileService {
    void initClient();
    String uploadFiles(HttpServletRequest request, String type) throws IOException;
    String uploadTmpFile(String filePath, String fileName) throws FileNotFoundException;
}

1.5 StringUtil通用類

都是定義好的,復(fù)制粘貼就行

package com.huashang.util;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
@Component("stringUtil")
public class StringUtil {
    private static final String ALL_CHARS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    private static final String ALL_NUMBERS = "0123456789";
    /**
     * 將換行處理為空
     *
     */
    public static String n2Null(String myString) {
        if (myString == null) {
            return myString;
        }
        String newString = null;
        Pattern CRLF = Pattern.compile("(\r\n|\r|\n|\n\r)");
        Matcher m = CRLF.matcher(myString);
        if (m.find()) {
            newString = m.replaceAll(" ");
        } else {
            newString = myString;
        }
        return newString;
    }
    public static String randomString(int length) {
        StringBuffer sb = new StringBuffer();
        Random random = new Random();
        for (int i = 0; i < length; i++) {
            sb.append(ALL_CHARS.charAt(random.nextInt(ALL_CHARS.length())));
        }
        return sb.toString();
    }
    public static String randomNumber(int length) {
        StringBuffer sb = new StringBuffer();
        Random random = new Random();
        for (int i = 0; i < length; i++) {
            sb.append(ALL_NUMBERS.charAt(random.nextInt(ALL_NUMBERS.length())));
        }
        return sb.toString();
    }
    public static boolean stringBlank(String str) {
        return str == null || "".equals(str.trim());
    }
    public static String getFileOldName(MultipartFile file) {
        return file.getOriginalFilename().replaceAll("[^a-zA-Z0-9.]", "^_^");
    }
    public static String humb2UnderLine(String s) {
        if (s == null) {
            return null;
        }
        StringBuilder sb = new StringBuilder();
        boolean upperCase = false;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            boolean nextUpperCase = true;
            if (i < (s.length() - 1)) {
                nextUpperCase = Character.isUpperCase(s.charAt(i + 1));
            }
            if (Character.isUpperCase(c)) {
                if (!upperCase || !nextUpperCase) {
                    if (i > 0) {
                        sb.append("_");
                    }
                }
                upperCase = true;
            } else {
                upperCase = false;
            }
            sb.append(Character.toLowerCase(c));
        }
        return sb.toString();
    }
    public static String firstImage(String images) {
        List<String> ia = imageArray(images);
        return ia.isEmpty() ? null : ia.get(0);
    }
    public static List<String> imageArray(String images) {
        List<String> is = new ArrayList<>();
        for (String i : split(images, ";")) {
            if (!"".equals(i.trim())) {
                is.add(i.trim());
            }
        }
        return is;
    }
    public static List<String> split(String images, String splitor) {
        if (images == null || "".equals(images.trim())) {
            return new ArrayList<>();
        }
        return Arrays.asList(images.split(splitor));
    }
    public static String nullString(Object obj) {
        return obj == null ? "" : obj.toString();
    }
    /**
     * 圖片的字符串,將其中的eshangying的連接替換為支持https協(xié)議的簡(jiǎn)贏域名
     * http://files.eshangying.com/2015-06-03/ctgge_518h0aZN0DL._UL1500_.jpg;
     * esyfiles.lrerp.com
     */
    public static String dealImageEwin2Jy(String images) {
        if (StringUtil.stringBlank(images)) {
            return images;
        }
        images = images.replace("files.eshangying.com", "esyfiles.lrerp.com");
        return images;
    }
    /**
     * 將字符串text中由openToken和closeToken組成的占位符依次替換為args數(shù)組中的值
     *
     * @param openToken
     * @param closeToken
     * @param text
     * @param args
     * @return
     */
    public static String parseInner(String openToken, String closeToken, String text, Object... args) {
        if (args == null || args.length <= 0) {
            return text;
        }
        int argsIndex = 0;
        if (text == null || text.isEmpty()) {
            return "";
        }
        char[] src = text.toCharArray();
        int offset = 0;
        // search open token
        int start = text.indexOf(openToken, offset);
        if (start == -1) {
            return text;
        }
        final StringBuilder builder = new StringBuilder();
        StringBuilder expression = null;
        while (start > -1) {
            if (start > 0 && src[start - 1] == '\\') {
                // this open token is escaped. remove the backslash and continue.
                builder.append(src, offset, start - offset - 1).append(openToken);
                offset = start + openToken.length();
            } else {
                // found open token. let's search close token.
                if (expression == null) {
                    expression = new StringBuilder();
                } else {
                    expression.setLength(0);
                }
                builder.append(src, offset, start - offset);
                offset = start + openToken.length();
                int end = text.indexOf(closeToken, offset);
                while (end > -1) {
                    if (end > offset && src[end - 1] == '\\') {
                        // this close token is escaped. remove the backslash and continue.
                        expression.append(src, offset, end - offset - 1).append(closeToken);
                        offset = end + closeToken.length();
                        end = text.indexOf(closeToken, offset);
                    } else {
                        expression.append(src, offset, end - offset);
                        offset = end + closeToken.length();
                        break;
                    }
                }
                if (end == -1) {
                    // close token was not found.
                    builder.append(src, start, src.length - start);
                    offset = src.length;
                } else {
                    ///僅僅修改了該else分支下的個(gè)別行代碼
                    String value = (argsIndex <= args.length - 1) ?
                            (args[argsIndex] == null ? "" : args[argsIndex].toString()) : expression.toString();
                    builder.append(value);
                    offset = end + closeToken.length();
                    argsIndex++;
                }
            }
            start = text.indexOf(openToken, offset);
        }
        if (offset < src.length) {
            builder.append(src, offset, src.length - offset);
        }
        return builder.toString();
    }
    public static String parseWith$(String text, Object... args) {
        return parseInner("${", "}", text, args);
    }
    public static String parse(String text, Object... args) {
        return parseInner("{", "}", text, args);
    }
    /**
     * 數(shù)組指定位置插入元素
     *
     * @param after 在數(shù)組哪個(gè)元素后面  特殊: index0 代表 插入最開始
     * @param item  需要插入的元素
     * @param arr   操作的數(shù)組
     * @return 插入后的數(shù)組
     */
    public static String[] arrPushItem(String after, String item, String[] arr) {
        ArrayList<String> list = new ArrayList<>(Arrays.asList(arr));
        if (after == null) {
            list.add(item);
        } else if ("index0".equals(after)) {
            list.add(0, item);
        } else {
            int i = list.indexOf(after) + 1;
            list.add(i, item);
        }
        String[] strings = new String[list.size()];
        list.toArray(strings);
        return strings;
    }
    /**
     * 字符串轉(zhuǎn)換為BigDecimal
     *
     * @param number
     * @return
     */
    public static BigDecimal string2BigDecimal(String number) {
        if (stringBlank(number)) {
            return null;
        }
        return new BigDecimal(number);
    }
    public static boolean isNumeric(String str) {
        if (stringBlank(str)) {
            return false;
        }
        return str.matches("-?[0-9]+.?[0-9]*");
    }
    /**
     * 替換掉html 標(biāo)簽
     *
     * @param myString
     * @return
     */
    public static String filterHtml(String myString) {
        if (myString == null) {
            return myString;
        }
        String newString = myString;
        Pattern BREND = Pattern.compile("(<br/>|<br />|<br>|<br >)", Pattern.CASE_INSENSITIVE);
        Matcher me = BREND.matcher(newString);
        if (me.find()) {
            newString = me.replaceAll("\r\n");
        }
        Pattern SPANEND = Pattern.compile("(<span/>|<span />)", Pattern.CASE_INSENSITIVE);
        Matcher se = SPANEND.matcher(newString);
        if (se.find()) {
            newString = se.replaceAll(" ");
        }
        // 過濾html標(biāo)簽
        Pattern pHtml = Pattern.compile("<[^>]+>", Pattern.CASE_INSENSITIVE);
        Matcher mHtml = pHtml.matcher(newString);
        if (mHtml.find()) {
            newString = mHtml.replaceAll("");
        }
        return newString;
    }
    public static String firstToLowerCase(String str) {
        if (stringBlank(str)) {
            return str;
        }
        return str.replaceFirst(String.valueOf(str.charAt(0)), String.valueOf(str.charAt(0)).toLowerCase());
    }
    public static List<String> stringArr2List(String[] stringArr) {
        List<String> resultList = new ArrayList<>();
        if (stringArr == null) {
            return resultList;
        }
        for (String string : stringArr) {
            if (StringUtil.stringBlank(string)) {
                continue;
            }
            resultList.add(string);
        }
        return resultList;
    }
    public static byte[] s2BytesUTF8(String str) {
        if (stringBlank(str)) {
            return null;
        }
        return str.getBytes(StandardCharsets.UTF_8);
    }
    /**
     * 解碼
     * 編碼字符串 --> 文本字符串
     * 支持對(duì) ASCII與UNICODE混合編碼的(臟文本)字符串解碼
     * Eg :  "\"2ABRT3425\\u884C\\u653F\\u590D\\u8BAE\\u8868436FDGDSD\""  -->  2ABRT3425行政復(fù)議表
     *
     * @param unicode
     * @return
     */
    public static String unicodetoString(String unicode) {
        if (unicode == null || "".equals(unicode)) {
            return null;
        }
        StringBuilder sb = new StringBuilder();
        for (int pos = 0; pos < unicode.length(); ) {
            //"\"2ABRT3425\\u884C\\u653F\\u590D\\u8BAE\\u8868436FDGDSD\"";
            //System.out.println("pos:"+unicode.substring(pos,pos+1)+" - "+pos);
            //System.out.println("index:"+unicode.indexOf("\\u", pos)+"\n");
            if (unicode.indexOf("\\u", pos) - pos == 0) {//unicode編碼 Eg: \\2435
                //System.out.println("pos2:"+unicode.substring(pos,pos+6));
                if (pos + 6 <= unicode.length()) {
                    Character ch = (char) Integer.parseInt(unicode.substring(pos + 2, pos + 6), 16);
                    //System.out.println("char:"+ch);
                    sb.append(ch);
                    pos += 6;
                } else {// \\u
                    sb.append(unicode, pos, pos + 2);
                    pos += 2;
                }
            } else {//非unicode編碼
                sb.append(unicode.charAt(pos));
                pos += 1;
            }
        }
        return sb.toString();
    }
    public static boolean integerBlank(Integer integer) {
        return integer == null || integer <= 0;
    }
}

 1.6 主程序加一個(gè)監(jiān)聽器

package com.huashang;
import com.huashang.listener.ErpApplicationListener;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@SpringBootApplication
@EnableAsync
@EnableScheduling
@EnableTransactionManagement
@EnableAspectJAutoProxy(proxyTargetClass = true)
@MapperScan("com.huashang.mapper")
@ComponentScan("com.huashang")
public class ErpApplication {
	public static void main(String[] args) {
		SpringApplication springApplication = new SpringApplication(ErpApplication.class);
		// 添加監(jiān)聽器,執(zhí)行需要在服務(wù)啟動(dòng)時(shí)執(zhí)行的業(yè)務(wù)邏輯
		springApplication.addListeners(new ErpApplicationListener());
		springApplication.run(args);
	}
}

 1.7 application.yml文件

只需要修改一下這里就行,是你oss的配置,我這里是阿里的oss

 oss是什么和怎么創(chuàng)建看視頻就行:

如何使用OSS控制臺(tái)、ossutil、ossbrowser、OSSSDK_對(duì)象存儲(chǔ) OSS-阿里云幫助中心 (aliyun.com)

創(chuàng)建好了以后,對(duì)

以上2個(gè)文件都進(jìn)行以下修改

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: 'lrerp'
    password: 'By*****23'
    url: jdbc:mysql://pc-uf6fv9vxz81ws1y53.rwlb.rds.aliyuncs.com:3306/lingrong?useUnicode=yes&characterEncoding=UTF8&useSSL=false&serverTimezone=Asia/Shanghai
  servlet:
    multipart:
      enabled: true
      max-file-size: 10MB
      max-request-size: 20MB
  aop:
    auto: true
cross:
  origin: 'lrerp.com'
audience:
  clientId: cbde72f64*****************00d3b
  base64Secret: ZWExZjcxNzFi*********E2NGUwZTEzZjgxYmRkMzU=
  name: restapiuser
  expiresSecond: 172800000
liteflow:
  print-banner: false
  rule-source-ext-data-map:
    driverClassName: com.mysql.cj.jdbc.Driver
    username: 'lrerp'
    password: '******3'
    url: jdbc:mysql://pc-uf6fv9vxz81ws1y53.rwlb.rds.aliyuncs.com:3306/lingrong?useUnicode=yes&characterEncoding=UTF8&useSSL=false&serverTimezone=Asia/Shanghai
    applicationName: lingrong
    chainTableName: chain
    chainApplicationNameField: application_name
    chainNameField: chain_name
    elDataField: el_data
alioss:
  url: file.lrerp.com
  endpoint: http://oss-cn-shanghai.aliyuncs.com
  accessKeyId: LT#****************PPM
  acceddKeySecret: UVg***************C6L
  bucketName: lrerp

2. 微信小程序端

2.1 TDesign的upload組件

TDesign的upload組件 (tencent.com)

https://tdesign.tencent.com/miniprogram/components/upload

1. app.json全局引用一下

2. wxml

如圖可以看到mediaType中我只保留了模版中的image,bind:add事件我定義了一個(gè)handleCertificateAdd(),用于上傳我的房屋產(chǎn)權(quán)圖片,max修改為0,可以上傳任意個(gè)圖片

3. js

js頁(yè)面主要修改了

1. data的數(shù)據(jù):

定義一個(gè)數(shù)組 `certificateList:[ ]`就行

2. 【重點(diǎn)!】uploadFile(file,updateProgress,updateSuccess)方法

 token

這個(gè)token就是數(shù)據(jù)庫(kù)中的token的值 

3. handleCertificateAdd()方法

 遍歷上傳的所有圖片,通過調(diào)用上面的uploadFile方法

下面來分析這幾個(gè)紅框中的代碼

1. 

      this.setData({
        certificateList: [...(this.data.certificateList), {
          ...file,
          status: 'loading'
        }],
      });

2.  

每個(gè)file都遍歷調(diào)用uploadFile(file,updateProgress,updateSuccess)方法實(shí)現(xiàn)上傳,

把方法體作為參數(shù),回調(diào),

方框中的方法,是uploadFile(file,updateProgress,updateSuccess)中的updateProgress參數(shù)

可以看到task的返回值參數(shù)res.progress為100

3.  

 (ue) => {
          console.log('certificateList:' + ue)
          this.setData({
            [`certificateList[${length}].status`]: 'done',
            [`certificateList[${length}].remoteUrl`]: ue.data
          });
        }

如下圖 方框中的方法,就是作為uploadFile(file,updateProgress,updateSuccess)中的updateSuccess參數(shù)

[`certificateList[${length}].status`]: 'done'

就是把圖片的status屬性設(shè)置為done,圖片顯示出來不會(huì)一直轉(zhuǎn)圈

到此這篇關(guān)于tdesign的文件上傳(微信小程序+idea的springboot)的文章就介紹到這了,更多相關(guān)微信小程序文件上傳內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaSE之ArrayList擴(kuò)容原理分析

    JavaSE之ArrayList擴(kuò)容原理分析

    這篇文章主要介紹了JavaSE之ArrayList擴(kuò)容原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2026-03-03
  • 23種設(shè)計(jì)模式(15)java解釋器模式

    23種設(shè)計(jì)模式(15)java解釋器模式

    這篇文章主要為大家詳細(xì)介紹了23種設(shè)計(jì)模式之java解釋器模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Spring 方法注解@Bean及配置類掃描路徑

    Spring 方法注解@Bean及配置類掃描路徑

    這篇文章主要介紹了Spring 方法注解@Bean及配置類掃描路徑,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2024-12-12
  • Java?Socket編程從零到實(shí)戰(zhàn)詳解(完整實(shí)戰(zhàn)案例)

    Java?Socket編程從零到實(shí)戰(zhàn)詳解(完整實(shí)戰(zhàn)案例)

    這篇文章主要介紹了Java?Socket編程從零到實(shí)戰(zhàn)詳解,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-04-04
  • Java并發(fā)容器介紹

    Java并發(fā)容器介紹

    這篇文章主要介紹了Java并發(fā)容器,Java并發(fā)包(concurrent)是Java用來處理并發(fā)問題的利器,該并發(fā)包中主要有原子類,鎖(lock),并發(fā)容器類等等。本系列博客主要就是介紹并發(fā)包中一些常用的并發(fā)容器,常用的類,那么我們就來看看下面文章的詳細(xì)內(nèi)容吧
    2021-10-10
  • Maven版本沖突的三種解決方法

    Maven版本沖突的三種解決方法

    在Maven項(xiàng)目中,依賴傳遞可能導(dǎo)致Jar包版本沖突,常見的解決策略包括依賴排除、版本鎖定和使用maven-shade-plugin插件,本文就來介紹一下這三種解決方法,感興趣的可以了解一下
    2024-10-10
  • springboot集成opencv實(shí)現(xiàn)人臉識(shí)別功能的詳細(xì)步驟

    springboot集成opencv實(shí)現(xiàn)人臉識(shí)別功能的詳細(xì)步驟

    大家都知道OpenCV是一個(gè)基于BSD許可(開源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫(kù),可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上今天通過本文給大家分享springboot集成opencv實(shí)現(xiàn)人臉識(shí)別,感興趣的朋友一起看看吧
    2021-06-06
  • SpringBoot基于Shiro處理ajax請(qǐng)求代碼實(shí)例

    SpringBoot基于Shiro處理ajax請(qǐng)求代碼實(shí)例

    這篇文章主要介紹了SpringBoot基于Shiro處理ajax請(qǐng)求代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 優(yōu)化常見的java排序算法

    優(yōu)化常見的java排序算法

    這篇文章主要介紹了Java編程中快速排序算法的實(shí)現(xiàn)及相關(guān)算法優(yōu)化,快速排序算法的最差時(shí)間復(fù)雜度為(n^2),最優(yōu)時(shí)間復(fù)雜度為(n\log n),存在優(yōu)化的空間,需要的朋友可以參考下
    2021-07-07
  • java懶惰評(píng)估實(shí)現(xiàn)方法

    java懶惰評(píng)估實(shí)現(xiàn)方法

    這篇文章主要介紹了java懶惰評(píng)估如何實(shí)現(xiàn)的相關(guān)內(nèi)容及實(shí)例,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-05-05

最新評(píng)論

军事| 广昌县| 泊头市| 饶平县| 罗平县| 务川| 托克逊县| 郯城县| 蓬溪县| 黑山县| 托克逊县| 枞阳县| 德清县| 保德县| 沅陵县| 司法| 潍坊市| 久治县| 遵化市| 桂东县| 贺兰县| 孙吴县| 宜春市| 天门市| 稻城县| 镇雄县| 南部县| 壤塘县| 冷水江市| 嘉义市| 彝良县| 安义县| 溆浦县| 吉木萨尔县| 乡宁县| 乌拉特中旗| 海晏县| 吐鲁番市| 顺平县| 德令哈市| 阳新县|