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 }