github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/mime/multipart/formdata.go (about)

     1  // Copyright 2011 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package multipart
     6  
     7  import (
     8  	"github.com/shogo82148/std/errors"
     9  	"github.com/shogo82148/std/io"
    10  	"github.com/shogo82148/std/net/textproto"
    11  )
    12  
    13  // ErrMessageTooLargeは、メッセージフォームデータが処理するには大きすぎる場合、ReadFormによって返されます。
    14  var ErrMessageTooLarge = errors.New("multipart: message too large")
    15  
    16  // ReadFormは、パートのContent-Dispositionが"form-data"であるマルチパートメッセージ全体を解析します。
    17  // メモリには最大でmaxMemoryバイト + 10MB(非ファイルパート用に予約)を格納します。
    18  // メモリに格納できないファイルパートは、一時ファイルとしてディスクに格納されます。
    19  // すべての非ファイルパートをメモリに格納できない場合、[ErrMessageTooLarge] を返します。
    20  func (r *Reader) ReadForm(maxMemory int64) (*Form, error)
    21  
    22  // Formは解析されたマルチパートフォームです。
    23  // ファイルパートはメモリまたはディスクに保存され、
    24  // [*FileHeader] のOpenメソッドを通じてアクセス可能です。
    25  // Valueパートは文字列として保存されます。
    26  // 両方ともフィールド名でキー化されます。
    27  type Form struct {
    28  	Value map[string][]string
    29  	File  map[string][]*FileHeader
    30  }
    31  
    32  // RemoveAllは、[Form] に関連付けられた一時ファイルをすべて削除します。
    33  func (f *Form) RemoveAll() error
    34  
    35  // FileHeaderは、マルチパートリクエストのファイル部分を記述します。
    36  type FileHeader struct {
    37  	Filename string
    38  	Header   textproto.MIMEHeader
    39  	Size     int64
    40  
    41  	content   []byte
    42  	tmpfile   string
    43  	tmpoff    int64
    44  	tmpshared bool
    45  }
    46  
    47  // Openは、[FileHeader] に関連付けられたFileを開き、それを返します。
    48  func (fh *FileHeader) Open() (File, error)
    49  
    50  // Fileは、マルチパートメッセージのファイル部分にアクセスするためのインターフェースです。
    51  // その内容はメモリに保存されるか、またはディスクに保存されます。
    52  // ディスクに保存されている場合、Fileの基礎となる具体的な型は*os.Fileになります。
    53  type File interface {
    54  	io.Reader
    55  	io.ReaderAt
    56  	io.Seeker
    57  	io.Closer
    58  }