MCPcopy Index your code
hub / github.com/imroc/req / writeMultipartFormFile

Function writeMultipartFormFile

middleware.go:62–124  ·  view source on GitHub ↗
(w *multipart.Writer, file *FileUpload, r *Request)

Source from the content-addressed store, hash-verified

60}
61
62func writeMultipartFormFile(w *multipart.Writer, file *FileUpload, r *Request) error {
63 content, err := file.GetFileContent()
64 if err != nil {
65 return err
66 }
67 defer content.Close()
68 if r.RetryAttempt > 0 { // reset file reader when retry a multipart file upload
69 if rs, ok := content.(io.ReadSeeker); ok {
70 _, err = rs.Seek(0, io.SeekStart)
71 if err != nil {
72 return err
73 }
74 }
75 }
76 // Auto detect actual multipart content type
77 cbuf := make([]byte, 512)
78 seeEOF := false
79 lastTime := time.Now()
80 size, err := content.Read(cbuf)
81 if err != nil {
82 if err == io.EOF {
83 seeEOF = true
84 } else {
85 return err
86 }
87 }
88
89 ct := file.ContentType
90 if ct == "" {
91 ct = http.DetectContentType(cbuf)
92 }
93 pw, err := w.CreatePart(createMultipartHeader(file, ct))
94 if err != nil {
95 return err
96 }
97
98 if r.forceChunkedEncoding && r.uploadCallback != nil {
99 pw = &callbackWriter{
100 Writer: pw,
101 lastTime: lastTime,
102 interval: r.uploadCallbackInterval,
103 totalSize: file.FileSize,
104 callback: func(written int64) {
105 r.uploadCallback(UploadInfo{
106 ParamName: file.ParamName,
107 FileName: file.FileName,
108 FileSize: file.FileSize,
109 UploadedSize: written,
110 })
111 },
112 }
113 }
114
115 if _, err = pw.Write(cbuf[:size]); err != nil {
116 return err
117 }
118 if seeEOF {
119 return nil

Callers 1

writeMultiPartFunction · 0.85

Calls 4

createMultipartHeaderFunction · 0.85
WriteMethod · 0.65
CloseMethod · 0.45
ReadMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…