mirror of
https://github.com/golang/go
synced 2024-11-02 09:28:34 +00:00
mime/multipart: delay reading random source
If a user sets his/her own boundary string with SetBoundary, we don't need to call randomBoundary at all. LGTM=bradfitz R=golang-codereviews, bradfitz CC=golang-codereviews https://golang.org/cl/95760043
This commit is contained in:
parent
678ba85e53
commit
fe4fc94b04
1 changed files with 8 additions and 6 deletions
|
@ -25,13 +25,15 @@ type Writer struct {
|
||||||
// writing to w.
|
// writing to w.
|
||||||
func NewWriter(w io.Writer) *Writer {
|
func NewWriter(w io.Writer) *Writer {
|
||||||
return &Writer{
|
return &Writer{
|
||||||
w: w,
|
w: w,
|
||||||
boundary: randomBoundary(),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Boundary returns the Writer's boundary.
|
// Boundary returns the Writer's boundary.
|
||||||
func (w *Writer) Boundary() string {
|
func (w *Writer) Boundary() string {
|
||||||
|
if w.boundary == "" {
|
||||||
|
w.boundary = randomBoundary()
|
||||||
|
}
|
||||||
return w.boundary
|
return w.boundary
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,7 +67,7 @@ func (w *Writer) SetBoundary(boundary string) error {
|
||||||
// FormDataContentType returns the Content-Type for an HTTP
|
// FormDataContentType returns the Content-Type for an HTTP
|
||||||
// multipart/form-data with this Writer's Boundary.
|
// multipart/form-data with this Writer's Boundary.
|
||||||
func (w *Writer) FormDataContentType() string {
|
func (w *Writer) FormDataContentType() string {
|
||||||
return "multipart/form-data; boundary=" + w.boundary
|
return "multipart/form-data; boundary=" + w.Boundary()
|
||||||
}
|
}
|
||||||
|
|
||||||
func randomBoundary() string {
|
func randomBoundary() string {
|
||||||
|
@ -89,9 +91,9 @@ func (w *Writer) CreatePart(header textproto.MIMEHeader) (io.Writer, error) {
|
||||||
}
|
}
|
||||||
var b bytes.Buffer
|
var b bytes.Buffer
|
||||||
if w.lastpart != nil {
|
if w.lastpart != nil {
|
||||||
fmt.Fprintf(&b, "\r\n--%s\r\n", w.boundary)
|
fmt.Fprintf(&b, "\r\n--%s\r\n", w.Boundary())
|
||||||
} else {
|
} else {
|
||||||
fmt.Fprintf(&b, "--%s\r\n", w.boundary)
|
fmt.Fprintf(&b, "--%s\r\n", w.Boundary())
|
||||||
}
|
}
|
||||||
// TODO(bradfitz): move this to textproto.MimeHeader.Write(w), have it sort
|
// TODO(bradfitz): move this to textproto.MimeHeader.Write(w), have it sort
|
||||||
// and clean, like http.Header.Write(w) does.
|
// and clean, like http.Header.Write(w) does.
|
||||||
|
@ -157,7 +159,7 @@ func (w *Writer) Close() error {
|
||||||
}
|
}
|
||||||
w.lastpart = nil
|
w.lastpart = nil
|
||||||
}
|
}
|
||||||
_, err := fmt.Fprintf(w.w, "\r\n--%s--\r\n", w.boundary)
|
_, err := fmt.Fprintf(w.w, "\r\n--%s--\r\n", w.Boundary())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue