国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

(總目錄)springboot - 實(shí)現(xiàn)zip文件上傳并對(duì)zip文件解壓, 包含上傳oss

這篇具有很好參考價(jià)值的文章主要介紹了(總目錄)springboot - 實(shí)現(xiàn)zip文件上傳并對(duì)zip文件解壓, 包含上傳oss。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


1.本文概述

1.1 本文簡(jiǎn)介

本文會(huì)包含

  • java 文件校驗(yàn)
  • 文件上傳
  • 文件壓縮
  • zip文件的解壓
  • oss的文件上傳
  • oss前端上傳

2. 功能實(shí)現(xiàn)

文章像齒輪一樣, 部分位置需要自己組裝滿足不同業(yè)務(wù)需求
需要哪個(gè)就加哪個(gè) 注意類型和位置即可 注釋都是很全的
如果在使用中 遇到問(wèn)題 歡迎評(píng)論區(qū)指正

2.1 統(tǒng)一文件校驗(yàn)

===> 傳送門: MultipartFile 統(tǒng)一文件校驗(yàn)

2.2 普通(多)文件上傳[服務(wù)器]

支持單/多文件同時(shí)上傳 部分service方法 這個(gè)都隨意 滿足springboot標(biāo)準(zhǔn)即可

2.2.1 controller層

    /**
     * 普通文件上傳
     * @param
     * @return
     */
    @ApiOperation("==> 普通文件上傳 <===")
    @RequestMapping(value = "/fileUpload", method = RequestMethod.POST)
    public ResultResponse fileUpload(MultipartFile[] file, PageVo pageVo) {

        log.info("===> 普通文件上傳 <===");

        ResultResponse result = ossAddService.fileUpload(file, pageVo.getSearchName());
        log.info("返回用戶信息:{}", result);
        return result;
    }

2.2.2 service層

 ResultResponse fileUpload(MultipartFile[] file, String searchName);

2.2.3 業(yè)務(wù)impl實(shí)現(xiàn)類

 	@SneakyThrows
    @Override
    public ResultResponse fileUpload(MultipartFile[] file, String searchName) {

        //文件上傳功能
        String str = FileIOUtils.fileUpload(file, searchName, false);

        return ResultResponse.ok().setData(str);
    }

2.2.4 FileIOUtils工具包代碼

注意: 有報(bào)錯(cuò)的位置 注釋掉即可 , 自己的業(yè)務(wù)代碼

  • throw異常位置 換成 RuntimeException(“我是異?!? 即可
  • ZipUtil.unzip() 解壓的方法 根據(jù)后綴名 是zip進(jìn)行解壓
    后面有介紹->2.3 不需要可以直接注釋
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.compress.utils.IOUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Objects;
import java.util.UUID;

/**
 * 文件上傳工具類
 *
 * @author pzy
 * @version 0.1.0
 * @description TODO
 */
@Slf4j
public class FileIOUtils {

    /**
     * 文件上傳
     *
     * @param file             上傳文件
     * @param uploadPath       上傳文件路徑
     * @param isRandomFileName 是否是隨機(jī)的文件名 true:是  false:否
     * @return
     */
    @SneakyThrows
    public static String fileUpload(MultipartFile[] file, String uploadPath, boolean isRandomFileName) {
        //上傳目錄地址
        log.debug(uploadPath);

        //(最新修改)如果目錄不存在,自動(dòng)創(chuàng)建文件夾(修復(fù))
        if (!FileIOUtils.createFile(1, new File(uploadPath), false)) {
            log.error("-------> 自動(dòng)創(chuàng)建文件或文件夾失敗!!! <--------");
        }

        //之后可以 優(yōu)化  根據(jù)配置文件自動(dòng)配置 mkdir-
        String suffix = null;
        String fileName = null;

        //  HashMap hashMap = new HashMap();

        FileOutputStream fileOutputStream = null;
        try {
            //遍歷文件數(shù)組執(zhí)行上傳(多文件上傳需要)
            for (MultipartFile multipartFile : file) {
                if (multipartFile != null) {
                    log.debug("開始上傳文件.......");
                    //調(diào)用上傳方法
                    suffix = Objects.requireNonNull(multipartFile.getOriginalFilename()).substring(multipartFile.getOriginalFilename().lastIndexOf(".")); //后綴名

                    //文件名 是隨機(jī) 就uuid 不是隨機(jī)就是原名
                    fileName = (isRandomFileName ? UUID.randomUUID() + suffix : multipartFile.getOriginalFilename());

                    fileOutputStream = new FileOutputStream(uploadPath + "/" + fileName);
                    IOUtils.copy(multipartFile.getInputStream(), fileOutputStream);
                    //file[i].transferTo(new File(uploadDir+"/"+fileName));
                    log.debug("上傳" + uploadPath + "/" + fileName + "文件成功!");

                    /*不是隨機(jī)文件上傳 并且是 zip 解壓*/
                    if (!isRandomFileName && Objects.equals(suffix, ".zip")) {
                        //解壓文件夾
                        ZipUtil.unzip(uploadPath + "/" + fileName, uploadPath);
                    }


                }
            }
            log.debug("上傳結(jié)束!所有文件上傳文件至:" + uploadPath);
            System.out.printf("文件名->%s\n", fileName);

            return fileName;
        } catch (Exception e) {
            //打印錯(cuò)誤堆棧信息
            e.printStackTrace();
            log.error("上傳文件失敗,請(qǐng)檢查后重試!!!");

            throw new ThirdServiceException(ResponseEnum.T160004);
        } finally {
            if (fileOutputStream != null) {
                fileOutputStream.close();
            }
        }
    }

    /**
     * 判斷文件是否存在,不存在就創(chuàng)建
     *
     * @param file
     */
    public static boolean createFile(int type, File file, Boolean flag) {
        if (type == 1) {
            if (!file.exists()) {
                return file.mkdirs();
            }
        }
//其他就是0 文件及目錄創(chuàng)建(存在bug)
        if (file.exists()) {
            log.debug("文件及相關(guān)路徑存在!!!");
        } else {
            log.info("文件不存在 ,創(chuàng)建文件以及文件夾 ...");
            //getParentFile() 獲取上級(jí)目錄(包含文件名時(shí)無(wú)法直接創(chuàng)建目錄的)
            if (!file.getParentFile().exists()) {
                log.info("文件及其路徑不存在, 創(chuàng)建路徑文件!!!");
                //創(chuàng)建層級(jí)目錄
                if (!file.getParentFile().mkdirs()) {
                    return false;
                }
            }
            if (flag) {
                try {
                    //上層目錄創(chuàng)建文件
                    log.info("文件夾創(chuàng)建開啟,在上層目錄下創(chuàng)建文件夾");
                    if (file.createNewFile()) {
                        return false;
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return true;
    }

    /**
     * 文件刪除回收
     *
     * @param path
     */
    public static boolean fileGCDelete(String path) {
        boolean flag = false;
        File file1 = new File(path);
        if (file1.exists()) {
            flag = file1.delete();
            try {
                do {
                    if (!flag) {
                        System.gc();    //回收資源
                        flag = file1.delete();
                    }
                } while (!flag);
            } catch (Exception e) {
                e.printStackTrace();
            }
            log.debug("路徑存在" + flag);
        }
        return flag;
    }
}

2.3 zip文件的解壓

文件壓縮工具包 使用java.util.zip

import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

/**
 * 解壓文件工具類
 *
 * @author pzy
 * @version 0.1.0
 * @description TODO
 */
@Slf4j
public class ZipUtil {
    /**
     * 解壓核心功能
     * @param zipFilePath 文件目標(biāo)路徑
     * @param destDir 文件解壓后路徑
     * @throws IOException
     */
    public static void unzip(String zipFilePath, String destDir) throws IOException {

        log.info("===>開啟文件解壓: {}",zipFilePath);
        File dir = new File(destDir);
        if (!dir.exists()) {
            boolean mkdirs = dir.mkdirs();
            if (!mkdirs) {
                log.error("多級(jí)文件夾創(chuàng)建失敗===>{}",destDir);
            }
        }
        //windows下中文默認(rèn)gbk 正常使用utf-8
        try (ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath), StandardCharsets.UTF_8)) {
            ZipEntry entry = zipIn.getNextEntry();
            while (entry != null) {
                String filePath = destDir + File.separator + entry.getName();
                if (!entry.isDirectory()) {
                    extractFile(zipIn, filePath);
                } else {
                    File dirToCreate = new File(filePath);
                    boolean mkdirs = dirToCreate.mkdirs();
                    if (!mkdirs) {
                        log.error("多級(jí)文件夾創(chuàng)建失敗===>{}",filePath);
                    }

                }
                zipIn.closeEntry();
                entry = zipIn.getNextEntry();
            }
        }
    }

    /**
     * 提取文件
     * @param zipIn ZipInputStream
     * @param filePath 文件路徑
     * @throws IOException
     */
    private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
        try (FileOutputStream fos = new FileOutputStream(filePath)) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = zipIn.read(buffer)) != -1) {
                fos.write(buffer, 0, bytesRead);
            }
        }
    }
}

2.4 圖片文件的壓縮

===> 傳送門: Thumbnails之上傳圖片后壓縮處理

2.5 oss文件后端上傳

===> 傳送門1: oss存儲(chǔ)對(duì)象 文件(視頻)上傳, 獲取回調(diào)中的url, 官網(wǎng)地址

===> 傳送門2: 后端oss存儲(chǔ)(完整版) 及 解決刪除本地文件顯示被占用問(wèn)題

2.6 oss文件前端上傳

===> 傳送門: oss前端文件上傳, 優(yōu)勢(shì)及后端如何配合

2.7 后端工具測(cè)試

? 傳送門: Postman,ApiPost, Idea httpclient tools,ApiFox 替代swagger,零侵入 接口文檔生成
springboot 上傳zip,# 第三方服務(wù),spring boot,java,oss,MultipartFile,zip

3. 本文異??偨Y(jié)

3.1 異常總結(jié)

3.1.1 文件解壓的時(shí)候報(bào)錯(cuò)解決

java.lang.IllegalArgumentException: MALFORMED 解決方法

  • 加charset(utf-8) 不行windows換gbk

3.1.2 讀取文件 報(bào) 無(wú)權(quán)限訪問(wèn)

兩種方法

  • 增加文件夾權(quán)限
  • 看看文件路徑 是否正確 找沒找到想讀取的文件

3.2 oss上傳異常

===> 傳送門: oss報(bào)錯(cuò)修改指南

4. 文章總結(jié)與預(yù)告

4.1 本文總結(jié)

注意文件夾路徑對(duì)應(yīng), 解壓文件路徑, 包括文件路徑斜線問(wèn)題 \\/
流用完記得關(guān)閉 判斷是否為空 避免空指針

4.2 下文預(yù)告

無(wú)預(yù)告, 終篇



作者pingzhuyan 感謝觀看
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-732168.html

到了這里,關(guān)于(總目錄)springboot - 實(shí)現(xiàn)zip文件上傳并對(duì)zip文件解壓, 包含上傳oss的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • java解壓zip文件

    java解壓zip文件

    zip文件目錄結(jié)構(gòu)如下: 其中,word下面還有多個(gè)子目錄,可以遞歸進(jìn)行解壓目錄,核心代碼如下:

    2024年02月11日
    瀏覽(26)
  • windows 解壓文件出現(xiàn)亂碼 7zip解壓文件中文亂碼 解決方法

    按照如下教程,更改windows默認(rèn)編碼格式為utf-8之后。 https://blog.csdn.net/qq_43780850/article/details/129122210 解壓文件時(shí),文件中的中文出現(xiàn)亂碼。原因是壓縮文件的格式為GBK,而我將windows平臺(tái)的默認(rèn)編碼改成了UTF-8,導(dǎo)致解壓出現(xiàn)亂碼。此時(shí)只需要按照上面的教程,取消勾選utf-8支持

    2024年02月13日
    瀏覽(28)
  • CentOS系統(tǒng)解壓ZIP文件

    在CentOS系統(tǒng)上,您可以使用命令行工具來(lái)解壓ZIP文件。ZIP文件是一種常見的壓縮文件格式,它可以將多個(gè)文件和文件夾打包成一個(gè)單獨(dú)的文件。下面是在CentOS系統(tǒng)上解壓ZIP文件的詳細(xì)步驟。 確保您已經(jīng)在CentOS系統(tǒng)上安裝了unzip工具。如果未安裝,可以使用以下命令進(jìn)行安裝:

    2024年02月04日
    瀏覽(42)
  • Linux下解壓.zip文件

    將指定文件(當(dāng)前目錄下的xxx.zip)解壓到當(dāng)前目錄 將指定文件(/usr/src/xxx.zip)解壓到指定目錄(/usr/src/target_folder) 壓縮指定文件a.out成a.zip文件 壓縮指定目錄/home/temp下的所有文件與子目錄成a.zip文件

    2024年02月16日
    瀏覽(24)
  • zip壓縮包上傳到了服務(wù)器怎么解壓——提示unzip:command not found

    xshell進(jìn)入壓縮包所在的文件夾 如果你已經(jīng)將zip壓縮包上傳到了服務(wù)器,可以使用以下命令解壓縮: 其中,file.zip為你上傳的zip壓縮包的文件名。執(zhí)行該命令后,zip壓縮包中的所有文件將被解壓到當(dāng)前目錄中。 如果你希望將解壓后的文件解壓到指定目錄中,可以使用以下命令

    2023年04月09日
    瀏覽(29)
  • QT 利用開源7z 實(shí)現(xiàn)解壓各種壓縮包,包括進(jìn)度條和文件名的顯示(zip,7z,rar,iso等50多種格式)

    QT 利用開源7z 實(shí)現(xiàn)解壓各種壓縮包,包括進(jìn)度條和文件名的顯示(zip,7z,rar,iso等50多種格式)

    ? ? ? ? 想做一個(gè)winRAR一樣的解壓軟件嗎?很簡(jiǎn)單,利用開源的7z庫(kù)就能實(shí)現(xiàn)。我看網(wǎng)上其他人說(shuō)的方法不敢茍同,誤人子弟。以前自己在項(xiàng)目中使用過(guò)7z,這次又有需要,就想記錄下來(lái)。如果你研究過(guò)如何用7z的話,一定知道7z的每一個(gè)GUID都代表了一種格式,50多種GUID也就有

    2024年02月04日
    瀏覽(24)
  • Linux下解壓.zip格式文件的方法

    在Linux操作系統(tǒng)中,我們經(jīng)常需要處理各種文件壓縮格式,其中.zip格式是一種常見的壓縮文件類型。本文將介紹如何在Linux系統(tǒng)中解壓.zip格式的文件,并提供相應(yīng)的源代碼示例。 首先,我們需要確保系統(tǒng)中已經(jīng)安裝了zip工具。如果尚未安裝,可以使用以下命令進(jìn)行安裝: 安

    2024年02月03日
    瀏覽(18)
  • python 解壓指定目錄的所有zip文件

    ========================================================== 修改了一下?。?!遞歸所有文件夾里面的zip 附件為,打包好的exe,可以直接執(zhí)行。(https://download.csdn.net/download/li13148023/88492399)

    2024年02月06日
    瀏覽(26)
  • unzip 解壓大文件出現(xiàn)錯(cuò)誤invalid zip file with overlapped components (possible zip bomb)(linux分卷解壓大文件錯(cuò)誤解決)

    先安裝p7zip 再使用p7zip進(jìn)行解壓 7z x 001.zip(首文件) 解決 小文件用常見方法就行了 1 2 cat? c.zip.*? d.zip 解壓 unzip d.zip (可能會(huì)出錯(cuò))

    2024年02月16日
    瀏覽(20)
  • 【Python腳本】使用Python解壓zip、rar文件

    Python 本身不支持 rar 文件的解壓,需要先安裝相關(guān)依賴才可使用 pip3 install rarfile 安裝rarfile庫(kù) (注意是解壓,壓縮這個(gè)方法不支持) 壓縮包中存在多個(gè)文件時(shí),可以使用for循環(huán)進(jìn)行批量解壓 安裝 unrar 模塊:pip install unrar 下載安裝 unrar library,網(wǎng)址:http://www.rarlab.com/rar/UnRAR

    2024年02月05日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包