upload

package module
v3.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 7, 2025 License: MIT Imports: 15 Imported by: 3

README

upload Go license codecov PkgGoDev Go version

处理上传文件,若是图片还可以设置水印。

s, err := NewLocalSaver("~/uploads/", "2006/01/02/", nil)
u := upload.New(s, 1024*1024*10, ".txt", ".jpg", ".png")
u.SetWatermark(...) // 设置水印图片

func(w http.ResponseWriter, r *http.Request) {
    if r.Method="POST"{
        u.Do("files", r) // 执行上传操作
    }
}

安装

go get github.com/issue9/upload/v3

版权

本项目采用 MIT 开源授权许可证,完整的授权说明可在 LICENSE 文件中找到。

Documentation

Overview

Package upload 提供文件上传的功能

处理上传文件,若是图片还可以设置水印。

s, err := NewLocalSaver("~/uploads/", "2006/01/02/", nil)
u := upload.New(s, 1024*1024*10, ".txt", ".jpg", ".png")
u.SetWatermarkFile(...) // 可根据需要设置水印图片
func(w http.ResponseWriter, r *http.Request) {
   if r.Method="POST"{
       u.Do("files", r) // 执行上传操作
   }
}

Index

Constants

View Source
const (
	None  = ""
	Year  = "2006/"
	Month = "2006/01/"
	Day   = "2006/01/02/"
)

New 的参数 format 所允许的几种取值

Variables

This section is empty.

Functions

func AllowWatermarkExts

func AllowWatermarkExts() []string

AllowWatermarkExts 允许的水印类型

func ErrNoUploadFile

func ErrNoUploadFile() error

func ErrNotAllowExt

func ErrNotAllowExt() error

func ErrNotAllowSize

func ErrNotAllowSize() error

func Filename

func Filename(dir, s, ext string) string

Filename 在 dir 下为 s 生成唯一文件名

Types

type Deleter added in v3.3.0

type Deleter interface {
	Saver

	// Delete 删除文件
	//
	// filename 由 [Saver.Save] 返回的内容。
	Delete(filename string) error
}

Deleter 实现了删除功能的 Saver

func NewLocalSaver

func NewLocalSaver(dir, baseURL, format string, f func(dir, filename, ext string) string) (Deleter, error)

NewLocalSaver 实现了一个基于本地文件系统的 Saver 接口

dir 上传文件的保存目录,若目录不存在,则会尝试创建;

baseURL 为上传的文件生成访问地址的前缀;

format 子目录的格式,只能是时间格式,取值只能是 NoneYearMonthDay

f 设置文件名的生成方式,要求文件在同一目录下具有唯一性,其类型如下:

func(dir, filename, ext string) string

dir 为文件夹名称,以 / 结尾,filename 为用户上传的文件名,ext 为 filename 中的扩展名部分, 返回值是 dir + filename 的路径,实现者可能要调整 filename 的值,以保证在 dir 下唯一。 如果为空,则会采用 Filename 作为默认值;

type Saver

type Saver interface {
	fs.FS

	// Save 保存用户上传的文件
	//
	// filename 为用户上传时的文件名,不包含扩展名部分;
	// ext 为 filename 中的扩展名部分;
	// 返回该文件对应的唯一标记。
	Save(file multipart.File, filename string, ext string) (string, error)
}

Saver 定义了用于保存上传内容的接口

type Upload

type Upload struct {
	// contains filtered or unexported fields
}

Upload 用于处理文件上传

func New

func New(saver Saver, maxSize int64, exts ...string) *Upload

New 声明文件上传的对象

maxSize 允许上传文件的最大尺寸,单位为 byte;

exts 允许的扩展名,若为空,将不允许任何文件上传;

func (*Upload) Do

func (u *Upload) Do(field string, r *http.Request) ([]string, error)

Do 执行上传的操作

field 表示用于上传的字段名称;

NOTE: 若是多文件上传,其中某一个文件不符合要求,会中断后续操作, 但是已经处理成功的也会返回给用户,所以可能会出现两个返回参数都不为 nil 的情况。

func (*Upload) Open

func (u *Upload) Open(name string) (fs.File, error)

Open fs.FS 接口

等同于 [Saver.Open]

func (*Upload) SetWatermark

func (u *Upload) SetWatermark(w *watermark.Watermark)

SetWatermark 设置水印的相关参数

如果 w 为 nil,则表示取消水印

func (*Upload) SetWatermarkFS

func (u *Upload) SetWatermarkFS(fs fs.FS, path string, padding int, pos watermark.Pos) error

SetWatermarkFS 设置水印的相关参数

path 为水印文件的路径; padding 为水印在目标不图像上的留白大小; pos 水印的位置;

func (*Upload) SetWatermarkFile

func (u *Upload) SetWatermarkFile(path string, padding int, pos watermark.Pos) error

SetWatermarkFile 设置水印的相关参数

path 为水印文件的路径; padding 为水印在目标不图像上的留白大小; pos 水印的位置。

Directories

Path Synopsis
简单的 upload 包的示例程序,可以一次上传一个或是多个功能!
简单的 upload 包的示例程序,可以一次上传一个或是多个功能!

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL