Golang如何將上傳的文件壓縮成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可選參數(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一文帶你搞懂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-10golang實(shí)現(xiàn)簡單的tcp數(shù)據(jù)傳輸
這篇文章主要為大家介紹了golang實(shí)現(xiàn)簡單的tcp數(shù)據(jù)傳輸,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12golang實(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