uploadfile

package module
v1.0.1 Latest Latest
Warning

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

Go to latest
Published: Jan 20, 2019 License: MIT Imports: 11 Imported by: 0

README

アップロードファイル管理ライブラリ

アップロードされたファイルを操作するライブラリ。 使用方法を次のサンプルで記す。

package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/ochipin/uploadfile"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        // アップロードされたファイル情報を取得する
        f := uploadfile.New(r, &uploadfile.UploadFiles{
            // ファイル名の保存はフォーマット指定子を利用可能
            // %Y: 2018(YYYY)
            // %m: 08(mm)
            // %d: 09(dd)
            // %H: 23(HH)
            // %M: 17(MM)
            // %S: 08(SS)
            // %g: MD5
            // %f: アップロードされたファイル名
            SaveFile:  "files/%Y/%m/%y%m%d_%H%M%S_%g_%f",
            // Byte単位で指定する。下記例は、 10 << 10 なので、10KB単位となる
            MaxSize:   10 << 10,
            // ファイル保存時のパーミッション
            Perm:      0644,
            // 同名のファイルの上書きを許可
            // true:  上書きを許可する
            // false: 上書きを許可しない
            Overwrite: true,
            // 一度にファイルアップロードできるファイル数の上限値。0以下は無制限となる
            Filenum:   3,
            // 重複したファイル名のアップロードの許可設定
            // true:  重複ファイル名を許可しない
            // false: 重複ファイル名を許可する
            Unique:    true,
        })

        // アップロードされたファイル数をカウントする
        fmt.Println(f.Filenum())

        // アップロードされたすべてのファイルの合計サイズを取得する
        fmt.Println(f.Size())

        // アップロードされた、全ファイルのエラーチェック
        if err := f.SumLimitExceeded(); err != nil {
            log.Println(err)
            return
        }

        // アップロードされた、ファイル単体のエラーチェック
        if err := f.LimitExceeded(); err != nil {
            log.Println(err)
            return
        }
    
        // アップロードされた全ファイルを保存する
        f.Write()

        // ファイル単体の情報を取得する
        get := f.Get("upload")
        // 取得したファイル単体を保存する
        // 保存時は、ファイル名、パーミッション、上書き設定の3つを引数に渡す必要がある。
        get.Write("filename", 0644, false)

        // ループによる、全ファイルの処理
        for name, headers := range f.Files() {
            // <input type='file' name='upload' ...
            // upload を出力する
            fmt.Println(name)
            for _, header := range headers {
                // ファイル保存
                header.SaveFile("%Y%m_filename", 0644, true)
                fmt.Println(header.Filename) // ファイル名
                fmt.Println(header.Size)     // ファイルサイズ
                fmt.Println(header.Header)   // ヘッダ情報
                // io.Reader と組み合わせることで、メールにアップロードされたファイルも添付可能
                var r io.Reader
                r = header
            }
        }
    })
    http.ListenAndServe(":8080", nil)
}

Documentation

Index

Constants

View Source
const (
	// NumLimitExceeded : ファイルアップロード数の上限値に到達した
	NumLimitExceeded = 1
	// SumLimitExceeded : アップロードしたファイルの合計サイズが上限値に到達した
	SumLimitExceeded = 2
	// LimitExceeded : アップロードしたファイルサイズが上限値に到達した
	LimitExceeded = 3
	// UniqueFile : 重複したファイルをアップロードされた
	UniqueFile = 4
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Error

type Error struct {
	Maxsize   int64                // アップロードできる最大のファイルサイズ数(Byte単位)
	Filename  string               // アップロードファイル名
	Filesize  int64                // アップロードしたファイルのサイズ(Byte単位)
	Attrname  string               // HTML上に記載されている属性名
	Header    textproto.MIMEHeader // ヘッダ情報
	ErrorType int                  // エラーの種類
}

Error : エラー管理構造体

func (*Error) Error

func (e *Error) Error() (result string)

type File

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

File : アップロードファイル管理構造体

func New

func New(r *http.Request, fileinfo *UploadFiles) *File

New : アップロードされたファイル情報を元に File 構造体を生成する

func (*File) Filenum

func (file *File) Filenum() int

Filenum : アップロードされたファイル数をカウント

func (*File) Files

func (file *File) Files() map[string][]*FileHeader

Files : アップロードされたファイルすべての情報を取得する

func (*File) Get

func (file *File) Get(name string) *FileHeader

Get : 指定したキー名(name属性名)に一致するファイル1つの情報を取得する

func (*File) Headers

func (file *File) Headers(name string) []*FileHeader

Headers : 指定したキー名(name属性名)に一致するファイル一覧の情報を取得する

func (*File) LimitExceeded

func (file *File) LimitExceeded() error

LimitExceeded : アップロードされたファイルのどれか1つがMaxSizeを超過した場合エラーを返却する

func (*File) SaveFileFormat

func (file *File) SaveFileFormat() string

SaveFileFormat : 保存するファイル名のフォーマットを取得する

func (*File) SaveFiles

func (file *File) SaveFiles() error

SaveFiles : アップロードされたファイルをすべて保存する

func (*File) Size

func (file *File) Size() int64

Size : アップロードされたファイルすべての合計サイズを返却する

func (*File) SumLimitExceeded

func (file *File) SumLimitExceeded() error

SumLimitExceeded : アップロードされたファイルの総合計サイズが、MaxSizeを超過した場合エラーを返却する

type FileHeader

type FileHeader struct {
	*multipart.FileHeader
}

FileHeader : アップロードされたファイル情報を管理する構造体

func (*FileHeader) SaveFile

func (header *FileHeader) SaveFile(format string, perm os.FileMode, overwrite bool) error

SaveFile : 指定されたファイル名で保存する

type UploadFiles

type UploadFiles struct {
	SaveFile  string      // 保存するファイルのパス。 ex) files/%Y/%m/%y%m%d%H%M%D_%g
	MaxSize   int64       // アップロードするファイルのサイズ制限(Byte単位)。ex) 20 * 1024 * 1024 20MB
	Perm      os.FileMode // 保存するファイルのパーミッション。 ex) 0644
	Overwrite bool        // true: 上書き, false: 上書きしない
	Unique    bool        // true: 同名のファイルは除外, false: 同名のファイルを除外しない
	Filenum   int         // 1度のリクエストで送信できるファイル数の上限値。0は無制限。
}

UploadFiles : ファイルアップロードの設定

Jump to

Keyboard shortcuts

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