欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang如何將上傳的文件壓縮成zip(小案例)

 更新時(shí)間:2024年01月30日 09:13:27   作者:R_RRR_R  
這篇文章主要介紹了Golang如何將上傳的文件壓縮成zip(小案例),這是一個(gè)簡單的golang壓縮文件小案例,可做很多的拓展,這里使用的庫是archive/zip,在gopkg里面搜zip就行,需要的朋友可以參考下

Golang將上傳的文件壓縮成zip小案例

這是一個(gè)簡單的golang壓縮文件小案例,可做很多的拓展,這里使用的庫是archive/zip,在gopkg里面搜zip就行。
使用gin框架,獲取前端傳過來的文件壓縮成zip,存儲(chǔ)路徑入數(shù)據(jù)庫中,代碼簡單示例如下:

@Param file formData file true "上傳文件"
func UploadToZip(c *gin.Context){
	//獲取前端傳過來的文件,如果有多個(gè)文件: 使用form,_ := c.MultipartForm()
	//files := form.File["file"]
	//然后遍歷files拿到每個(gè)文件
	file,err := c.FormFile("file")
	if err != nil {
		response.Fail("參數(shù)有誤",c)
		return
	}
	//創(chuàng)建目錄和指定文件名
	err = c.SaveUploadedFile( file ,"files/" + file + file.Filename)
	if err != nil {
		response.Fail("存儲(chǔ)文件失敗",c)
		return
	}
	//在指定的目錄生成你要的zip文件
	create, err  := os.Create("flies/dome.zip")
	defer create.Close()
	if err != nil {
		response.Fail("創(chuàng)建失敗",c)
		retuen
	}
	//創(chuàng)建一個(gè)zip流
	writer := zip.NewWriter(create)
	defer writer.Close()
	//讀取存儲(chǔ)的目錄,將里面的文件壓縮
	readFile ,err := os.ReadDir("files")
	if err != nil {
		response.Fail("讀取文件失敗",c)
		retuen
	}
	//遍歷目錄,獲取單個(gè)文件
	for _,rf := range readFile {
		//只壓縮文件,目錄不做壓縮
		if !rf.IsDir() {
			//打開要壓縮的文件
			open,err := os.Open("flies" + rf.Name())
			if err != nil {
				response.Fail("打開文件失敗",c)
				retuen
			}
			//創(chuàng)建一個(gè)壓縮包里面的文件和文件名,這樣解壓后會(huì)有一個(gè)files目錄,目錄里面有壓縮的文件
			f, _ := writer.Create("flies" + rf.Name())
			//將文件壓縮成zip
			if _,err := io.Copy(f,open);err != nil {
				response.Fail("壓縮失敗",c)
				retuen
			}
		}
	}
	//將壓縮路徑存放數(shù)據(jù)庫
	...
	response.OK("壓縮成功",c)
}

go語言實(shí)現(xiàn)zip壓縮文件

直接上代碼:

func ZipFiles(filename string, files []string, oldform, newform string) error {
	newZipFile, err := os.Create(filename)
	if err != nil {
		return err
	}
	defer newZipFile.Close()
	zipWriter := zip.NewWriter(newZipFile)
	defer zipWriter.Close()
	// 把files添加到zip中
	for _, file := range files {
		zipfile, err := os.Open(file)
		if err != nil {
			return err
		}
		defer zipfile.Close()
		info, err := zipfile.Stat()
		if err != nil {
			return err
		}
		header, err := zip.FileInfoHeader(info)
		if err != nil {
			return err
		}
		header.Name = strings.Replace(file, oldform, newform, -1)
		header.Method = zip.Deflate
		writer, err := zipWriter.CreateHeader(header)
		if err != nil {
			return err
		}
		if _, err = io.Copy(writer, zipfile); err != nil {
			return err
		}
	}
	return nil
}
調(diào)用:
ZipFiles(zipFileName, files, ".", ".")

注意:.表示的是根目錄。需要放入壓縮文件的幾個(gè)文件在哪個(gè)目錄,那么該函數(shù)的第3個(gè)參數(shù)就寫什么,上面代碼表示待壓縮的文件在根目錄,壓縮文件(第4個(gè)參數(shù))也將生成在根目錄。

到此這篇關(guān)于Golang如何將上傳的文件壓縮成zip(小案例)的文章就介紹到這了,更多相關(guān)go上傳文件壓縮zip內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang內(nèi)存管理之內(nèi)存分配器詳解

    Golang內(nèi)存管理之內(nèi)存分配器詳解

    Go內(nèi)存分配器的設(shè)計(jì)思想來源于TCMalloc,全稱是Thread-Caching?Malloc,核心思想是把內(nèi)存分為多級(jí)管理,下面就來和大家深入聊聊Go語言內(nèi)存分配器的使用吧
    2023-06-06
  • golang整合jwt的實(shí)現(xiàn)示例

    golang整合jwt的實(shí)現(xiàn)示例

    json web tokens(jwt)已成為大多數(shù)web api設(shè)計(jì)中的常見身份驗(yàn)證和授權(quán)方案之一,本文主要介紹了golang整合jwt的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • Go語言實(shí)現(xiàn)熱更新具體步驟

    Go語言實(shí)現(xiàn)熱更新具體步驟

    這篇文章主要為大家介紹了Go語言實(shí)現(xiàn)熱更新具體步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • 教你利用Golang可選參數(shù)實(shí)現(xiàn)可選模式

    教你利用Golang可選參數(shù)實(shí)現(xiàn)可選模式

    本文討論Golang函數(shù)可選參數(shù)及函數(shù)類型,以及如何利用可選函數(shù)類型實(shí)現(xiàn)可選模式。同時(shí)通過構(gòu)造函數(shù)作為示例,實(shí)現(xiàn)強(qiáng)大帶可選參數(shù)的構(gòu)造函數(shù),讓代碼更直觀、靈活、支持?jǐn)U展
    2023-01-01
  • goland設(shè)置控制臺(tái)折疊效果

    goland設(shè)置控制臺(tái)折疊效果

    這篇文章主要介紹了goland設(shè)置控制臺(tái)折疊效果,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 一文帶你搞懂Golang結(jié)構(gòu)體內(nèi)存布局

    一文帶你搞懂Golang結(jié)構(gòu)體內(nèi)存布局

    結(jié)構(gòu)體在Go語言中是一個(gè)很重要的部分,在項(xiàng)目中會(huì)經(jīng)常用到。這篇文章主要帶大家看一下結(jié)構(gòu)體在內(nèi)存中是怎么分布的?通過對內(nèi)存布局的了解,可以幫助我們寫出更優(yōu)質(zhì)的代碼。感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助
    2022-10-10
  • golang實(shí)現(xiàn)簡單的tcp數(shù)據(jù)傳輸

    golang實(shí)現(xiàn)簡單的tcp數(shù)據(jù)傳輸

    這篇文章主要為大家介紹了golang實(shí)現(xiàn)簡單的tcp數(shù)據(jù)傳輸,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • golang實(shí)現(xiàn)單點(diǎn)登錄系統(tǒng)(go-sso)

    golang實(shí)現(xiàn)單點(diǎn)登錄系統(tǒng)(go-sso)

    這篇文章主要介紹了golang實(shí)現(xiàn)單點(diǎn)登錄系統(tǒng)(go-sso),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Go?defer?去掉閉包函數(shù)及用法分析

    Go?defer?去掉閉包函數(shù)及用法分析

    這篇文章主要為大家介紹了Go?defer?去掉閉包函數(shù)及用法分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • golang中iota的用法小結(jié)

    golang中iota的用法小結(jié)

    iota是Go語言中的一個(gè)預(yù)定義標(biāo)識(shí)符,用于表示const聲明塊中每個(gè)常量的偏移值,本文主要介紹了golang中iota的用法小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03

最新評(píng)論