@@ -96,25 +96,98 @@ func validateImageContentType(contentType string) error {
9696 return errFileMustBeImage
9797}
9898
99- func buildUploadImageReq (imageMimeType , fileName string , fileContents io.Reader ) (string , []byte , error ) {
99+ func appendFileToRequest (
100+ multipartWriter * multipart.Writer ,
101+ fieldName ,
102+ fileName ,
103+ mimeType string ,
104+ fileContents io.Reader ,
105+ ) error {
106+ formFileWriter , err := createFormFileWithContentType (multipartWriter , fieldName , fileName , mimeType )
107+ if err != nil {
108+ return err
109+ }
110+
111+ if _ , err = io .Copy (formFileWriter , fileContents ); err != nil {
112+ return err
113+ }
114+
115+ return nil
116+ }
117+
118+ func writeFormField (
119+ multipartWriter * multipart.Writer ,
120+ fieldName ,
121+ fieldValue string ,
122+ ) error {
123+ fieldWriter , err := multipartWriter .CreateFormField (fieldName )
124+ if err != nil {
125+ return err
126+ }
127+
128+ if _ , err = fieldWriter .Write ([]byte (fieldValue )); err != nil {
129+ return err
130+ }
131+
132+ return nil
133+ }
134+
135+ func writeMetadataFields (
136+ multipartWriter * multipart.Writer ,
137+ itemID ,
138+ assetType ,
139+ companyID string ,
140+ ) error {
141+ if err := writeFormField (multipartWriter , "itemId" , itemID ); err != nil {
142+ return err
143+ }
144+
145+ if err := writeFormField (multipartWriter , "assetType" , assetType ); err != nil {
146+ return err
147+ }
148+
149+ err := writeFormField (multipartWriter , "tenantId" , companyID )
150+
151+ return err
152+ }
153+
154+ func buildUploadImageReq (
155+ imageMimeType ,
156+ fileName string ,
157+ fileContents io.Reader ,
158+ itemID ,
159+ assetType ,
160+ companyID string ,
161+ ) (string , []byte , error ) {
100162 var bodyBuffer bytes.Buffer
101163 multipartWriter := multipart .NewWriter (& bodyBuffer )
102- formFileWriter , err := createFormFileWithContentType ( multipartWriter , multipartFieldName , fileName , imageMimeType )
103- if err != nil {
164+
165+ if err := appendFileToRequest ( multipartWriter , multipartFieldName , fileName , imageMimeType , fileContents ); err != nil {
104166 return "" , nil , err
105167 }
106- if _ , err = io .Copy (formFileWriter , fileContents ); err != nil {
168+
169+ if err := writeMetadataFields (multipartWriter , itemID , assetType , companyID ); err != nil {
170+ return "" , nil , err
171+ }
172+
173+ if err := multipartWriter .Close (); err != nil {
107174 return "" , nil , err
108175 }
109- multipartWriter .Close ()
110176
111177 reqContentType := multipartWriter .FormDataContentType ()
112178 bodyBytes := bodyBuffer .Bytes ()
113179
114180 return reqContentType , bodyBytes , nil
115181}
116182
117- func uploadImageFileAndGetURL (ctx context.Context , client * client.APIClient , companyID , filePath string ) (string , error ) {
183+ func uploadImageFileAndGetURL (
184+ ctx context.Context ,
185+ client * client.APIClient ,
186+ companyID ,
187+ filePath string ,
188+ assetType string ,
189+ itemID string ,
190+ ) (string , error ) {
118191 imageFile , err := os .Open (filePath )
119192 if err != nil {
120193 return "" , err
@@ -133,7 +206,16 @@ func uploadImageFileAndGetURL(ctx context.Context, client *client.APIClient, com
133206 return "" , err
134207 }
135208
136- imageURL , err := uploadSingleFileWithMultipart (ctx , client , companyID , contentType , imageFile .Name (), imageFile )
209+ imageURL , err := uploadSingleFileWithMultipart (
210+ ctx ,
211+ client ,
212+ companyID ,
213+ contentType ,
214+ imageFile .Name (),
215+ imageFile ,
216+ itemID ,
217+ assetType ,
218+ )
137219 if err != nil {
138220 return "" , err
139221 }
@@ -142,12 +224,28 @@ func uploadImageFileAndGetURL(ctx context.Context, client *client.APIClient, com
142224
143225// uploadSingleFileWithMultipart uploads the given Reader as a single multipart file
144226// the part will also be given a filename and a contentType
145- func uploadSingleFileWithMultipart (ctx context.Context , client * client.APIClient , companyID , fileMimeType , fileName string , fileContents io.Reader ) (string , error ) {
227+ func uploadSingleFileWithMultipart (
228+ ctx context.Context ,
229+ client * client.APIClient ,
230+ companyID ,
231+ fileMimeType ,
232+ fileName string ,
233+ fileContents io.Reader ,
234+ itemID string ,
235+ assetType string ,
236+ ) (string , error ) {
146237 if companyID == "" {
147238 return "" , errCompanyIDNotDefined
148239 }
149240
150- contentType , bodyBytes , err := buildUploadImageReq (fileMimeType , fileName , fileContents )
241+ contentType , bodyBytes , err := buildUploadImageReq (
242+ fileMimeType ,
243+ fileName ,
244+ fileContents ,
245+ itemID ,
246+ assetType ,
247+ companyID ,
248+ )
151249 if err != nil {
152250 return "" , nil
153251 }
0 commit comments