Golang如何將上傳的文件壓縮成zip(小案例)
Golang將上傳的文件壓縮成zip小案例
這是一個簡單的golang壓縮文件小案例,可做很多的拓展,這里使用的庫是archive/zip,在gopkg里面搜zip就行。
使用gin框架,獲取前端傳過來的文件壓縮成zip,存儲路徑入數(shù)據(jù)庫中,代碼簡單示例如下:
@Param file formData file true "上傳文件"
func UploadToZip(c *gin.Context){
//獲取前端傳過來的文件,如果有多個文件: 使用form,_ := c.MultipartForm()
//files := form.File["file"]
//然后遍歷files拿到每個文件
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("存儲文件失敗",c)
return
}
//在指定的目錄生成你要的zip文件
create, err := os.Create("flies/dome.zip")
defer create.Close()
if err != nil {
response.Fail("創(chuàng)建失敗",c)
retuen
}
//創(chuàng)建一個zip流
writer := zip.NewWriter(create)
defer writer.Close()
//讀取存儲的目錄,將里面的文件壓縮
readFile ,err := os.ReadDir("files")
if err != nil {
response.Fail("讀取文件失敗",c)
retuen
}
//遍歷目錄,獲取單個文件
for _,rf := range readFile {
//只壓縮文件,目錄不做壓縮
if !rf.IsDir() {
//打開要壓縮的文件
open,err := os.Open("flies" + rf.Name())
if err != nil {
response.Fail("打開文件失敗",c)
retuen
}
//創(chuàng)建一個壓縮包里面的文件和文件名,這樣解壓后會有一個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語言實現(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, ".", ".")注意:.表示的是根目錄。需要放入壓縮文件的幾個文件在哪個目錄,那么該函數(shù)的第3個參數(shù)就寫什么,上面代碼表示待壓縮的文件在根目錄,壓縮文件(第4個參數(shù))也將生成在根目錄。
到此這篇關于Golang如何將上傳的文件壓縮成zip(小案例)的文章就介紹到這了,更多相關go上傳文件壓縮zip內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
教你利用Golang可選參數(shù)實現(xiàn)可選模式
本文討論Golang函數(shù)可選參數(shù)及函數(shù)類型,以及如何利用可選函數(shù)類型實現(xiàn)可選模式。同時通過構造函數(shù)作為示例,實現(xiàn)強大帶可選參數(shù)的構造函數(shù),讓代碼更直觀、靈活、支持擴展2023-01-01
golang實現(xiàn)簡單的tcp數(shù)據(jù)傳輸
這篇文章主要為大家介紹了golang實現(xiàn)簡單的tcp數(shù)據(jù)傳輸,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12
golang實現(xiàn)單點登錄系統(tǒng)(go-sso)
這篇文章主要介紹了golang實現(xiàn)單點登錄系統(tǒng)(go-sso),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06

