
* 媒体库增加分类,图库多选择时优化。 * 重构 JWT token 生成,使用 `New()` 函数代替直接创建实例 * 上传组件支持查看大图 (#1982) * 将参数缓存,媒体库增加分类,图库多选择时优化。 (#1978) * 媒体库增加分类,图库多选择时优化。 *修复文件上传进度显示bug&按钮样式优化 (#1986) * fix:添加内部 iframe 展示网页,优化 permission 代码 * 俩个uuid库合并一个,更新库到当前版本。 * 优化关于我们界面 * feat: 个人中心头像调整,媒体库兼容性调整。 * feat: 自动化代码前端页面美化,多余按钮收入专家模式 * feat: 增加单独生成server功能 * feat: 限制单独生成前后端的情况下的细节配置 * feat: 修复全选失败报错的问题 --------- Co-authored-by: task <121913992@qq.com> Co-authored-by: Feng.YJ <32027253+huiyifyj@users.noreply.github.com> Co-authored-by: will0523 <dygsunshine@163.com> Co-authored-by: task <ms.yangdan@gmail.com> Co-authored-by: sslee <57312216+GIS142857@users.noreply.github.com> Co-authored-by: bypanghu <bypanghu@163.com> Co-authored-by: Azir <2075125282@qq.com> Co-authored-by: piexlMax(奇淼 <qimiaojiangjizhao@gmail.com> Co-authored-by: krank <emosick@qq.com>
54 lines
1.0 KiB
Go
54 lines
1.0 KiB
Go
package utils
|
|
|
|
import (
|
|
"archive/zip"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
// 解压
|
|
func Unzip(zipFile string, destDir string) ([]string, error) {
|
|
zipReader, err := zip.OpenReader(zipFile)
|
|
var paths []string
|
|
if err != nil {
|
|
return []string{}, err
|
|
}
|
|
defer zipReader.Close()
|
|
|
|
for _, f := range zipReader.File {
|
|
if strings.Contains(f.Name, "..") {
|
|
return []string{}, fmt.Errorf("%s 文件名不合法", f.Name)
|
|
}
|
|
fpath := filepath.Join(destDir, f.Name)
|
|
paths = append(paths, fpath)
|
|
if f.FileInfo().IsDir() {
|
|
os.MkdirAll(fpath, os.ModePerm)
|
|
} else {
|
|
if err = os.MkdirAll(filepath.Dir(fpath), os.ModePerm); err != nil {
|
|
return []string{}, err
|
|
}
|
|
|
|
inFile, err := f.Open()
|
|
if err != nil {
|
|
return []string{}, err
|
|
}
|
|
defer inFile.Close()
|
|
|
|
outFile, err := os.OpenFile(fpath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())
|
|
if err != nil {
|
|
return []string{}, err
|
|
}
|
|
defer outFile.Close()
|
|
|
|
_, err = io.Copy(outFile, inFile)
|
|
if err != nil {
|
|
return []string{}, err
|
|
}
|
|
}
|
|
}
|
|
return paths, nil
|
|
}
|