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

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

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

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

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

@Param file formData file true "上傳文件"
func UploadToZip(c *gin.Context){
	//獲取前端傳過(guò)來(lái)的文件,如果有多個(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ù)庫(kù)
	...
	response.OK("壓縮成功",c)
}

go語(yǔ)言實(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang實(shí)現(xiàn)大文件讀取的代碼示例

    golang實(shí)現(xiàn)大文件讀取的代碼示例

    在實(shí)際工作,我們需要讀取大數(shù)據(jù)文件,文件可能上G百G,所以我們不可能一次性的讀取到內(nèi)存,接下來(lái)本文給大家介紹了golang實(shí)現(xiàn)大文件讀取的示例,需要的朋友可以參考下
    2024-04-04
  • Go語(yǔ)言使用sort包對(duì)任意類型元素的集合進(jìn)行排序的方法

    Go語(yǔ)言使用sort包對(duì)任意類型元素的集合進(jìn)行排序的方法

    這篇文章主要介紹了Go語(yǔ)言使用sort包對(duì)任意類型元素的集合進(jìn)行排序的方法,實(shí)例分析了sort排序所涉及的方法與相關(guān)的使用技巧,需要的朋友可以參考下
    2015-02-02
  • Go語(yǔ)言中的自定義函數(shù)類型的實(shí)現(xiàn)

    Go語(yǔ)言中的自定義函數(shù)類型的實(shí)現(xiàn)

    在Go語(yǔ)言中,函數(shù)類型是一種將函數(shù)作為值的數(shù)據(jù)類型,本文主要介紹了Go語(yǔ)言中的自定義函數(shù)類型,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • 使用docker構(gòu)建golang線上部署環(huán)境的步驟詳解

    使用docker構(gòu)建golang線上部署環(huán)境的步驟詳解

    這篇文章主要介紹了使用docker構(gòu)建golang線上部署環(huán)境的步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • Go實(shí)現(xiàn)自己的網(wǎng)絡(luò)流量解析和行為檢測(cè)引擎原理

    Go實(shí)現(xiàn)自己的網(wǎng)絡(luò)流量解析和行為檢測(cè)引擎原理

    這篇文章主要為大家介紹了Go實(shí)現(xiàn)自己的網(wǎng)絡(luò)流量解析和行為檢測(cè)引擎原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Go語(yǔ)言中的訪問(wèn)權(quán)限控制

    Go語(yǔ)言中的訪問(wèn)權(quán)限控制

    在?go?中進(jìn)行權(quán)限管理時(shí),推薦使用?grouper、casbin?和?sentry?框架,grouper?適合基于角色的訪問(wèn)控制,casbin?提供高級(jí)?rbac?功能,而?sentry?提供云托管權(quán)限服務(wù)和豐富的功能集,包括多因素認(rèn)證和活動(dòng)審核,這些框架有助于在電子商務(wù)網(wǎng)站等實(shí)際場(chǎng)景中實(shí)施細(xì)粒度的訪問(wèn)控制
    2024-08-08
  • Golang文件讀寫操作詳情

    Golang文件讀寫操作詳情

    這篇文章主要介紹了Golang文件讀寫操作詳情,文件是數(shù)據(jù)源(保存數(shù)據(jù)的地方)的一種,文件最主要的作用就是保存數(shù)據(jù),文件在程序中是以流的形式來(lái)操作的,更多詳細(xì)內(nèi)容需要的朋友可以參考一下
    2022-07-07
  • Go語(yǔ)言中如何實(shí)現(xiàn)并發(fā)

    Go語(yǔ)言中如何實(shí)現(xiàn)并發(fā)

    Go的并發(fā)機(jī)制通過(guò)協(xié)程和通道的簡(jiǎn)單性和高效性,使得編寫并發(fā)代碼變得相對(duì)容易,這種并發(fā)模型被廣泛用于構(gòu)建高性能的網(wǎng)絡(luò)服務(wù)、并行處理任務(wù)和其他需要有效利用多核處理器的應(yīng)用程序,這篇文章主要介紹了在Go中如何實(shí)現(xiàn)并發(fā),需要的朋友可以參考下
    2023-09-09
  • 聊聊Golang中很好用的viper配置模塊

    聊聊Golang中很好用的viper配置模塊

    這篇文章主要介紹了Golang中很好用的viper配置模塊用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • golang qq郵件發(fā)送驗(yàn)證碼功能

    golang qq郵件發(fā)送驗(yàn)證碼功能

    驗(yàn)證碼在多個(gè)場(chǎng)景下發(fā)揮著重要作用,如注冊(cè)/登錄、短信接口保護(hù)、提交/投票、密碼找回和支付驗(yàn)證等,以保障賬號(hào)安全和防止惡意操作,此外,文章還介紹了使用golang通過(guò)qq郵件發(fā)送驗(yàn)證碼的實(shí)現(xiàn)過(guò)程,包括獲取授權(quán)碼、下載依賴包和編寫代碼,感興趣的朋友跟隨小編一起看看吧
    2024-09-09

最新評(píng)論

南溪县| 类乌齐县| 乾安县| 荣昌县| 昌黎县| 河东区| 商河县| 昌黎县| 姜堰市| 隆德县| 福州市| 朝阳县| 浏阳市| 南川市| 和硕县| 马鞍山市| 宜宾县| 正镶白旗| 北流市| 浦东新区| 临江市| 玛沁县| 铁岭市| 郁南县| 道真| 高邑县| 六安市| 沛县| 乐清市| 汝南县| 麻城市| 金乡县| 禹州市| 北票市| 会理县| 泗水县| 玛纳斯县| 河东区| 明水县| 繁峙县| 罗江县|