Ian Cubbon 6779c33b9d
[GO][Client] Multipart/form-data Request Support More Than One File (#10843)
* Instead of limiting a request to a single file when
performing an upload, use a slice of files so an
arbitrary number of files can be used in the form.

* Remove commented out line of code

* Update examples for multi-form file fix for multiple files

* Convert spaces to tabs for indentation

* Updated examples to have tabs instead of spaces

* Add an example of a multipart/form-data OA3 schema
that contains two files to be uploaded
2021-11-22 16:27:43 +08:00

173 lines
5.0 KiB
Go

/*
Multiple Files via form-data
This is a sample server with a single endpoint that accepts two files via a multipart/form-data POST request.
API version: 1.0.0
*/
// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
package openapi
import (
"bytes"
_context "context"
_ioutil "io/ioutil"
_nethttp "net/http"
_neturl "net/url"
"os"
)
// Linger please
var (
_ _context.Context
)
// DefaultApiService DefaultApi service
type DefaultApiService service
type ApiUploadFilesRequest struct {
ctx _context.Context
ApiService *DefaultApiService
file **os.File
secondFile **os.File
}
// file to upload
func (r ApiUploadFilesRequest) File(file *os.File) ApiUploadFilesRequest {
r.file = &file
return r
}
// another file to upload
func (r ApiUploadFilesRequest) SecondFile(secondFile *os.File) ApiUploadFilesRequest {
r.secondFile = &secondFile
return r
}
func (r ApiUploadFilesRequest) Execute() (ApiResponse, *_nethttp.Response, error) {
return r.ApiService.UploadFilesExecute(r)
}
/*
UploadFiles uploads two files
@param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
@return ApiUploadFilesRequest
*/
func (a *DefaultApiService) UploadFiles(ctx _context.Context) ApiUploadFilesRequest {
return ApiUploadFilesRequest{
ApiService: a,
ctx: ctx,
}
}
// Execute executes the request
// @return ApiResponse
func (a *DefaultApiService) UploadFilesExecute(r ApiUploadFilesRequest) (ApiResponse, *_nethttp.Response, error) {
var (
localVarHTTPMethod = _nethttp.MethodPost
localVarPostBody interface{}
formFiles []formFile
localVarReturnValue ApiResponse
)
localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DefaultApiService.UploadFiles")
if err != nil {
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/uploadFiles"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
localVarFormParams := _neturl.Values{}
// to determine the Content-Type header
localVarHTTPContentTypes := []string{"multipart/form-data"}
// set Content-Type header
localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
if localVarHTTPContentType != "" {
localVarHeaderParams["Content-Type"] = localVarHTTPContentType
}
// to determine the Accept header
localVarHTTPHeaderAccepts := []string{"application/json"}
// set Accept header
localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
if localVarHTTPHeaderAccept != "" {
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
}
var fileLocalVarFormFileName string
var fileLocalVarFileName string
var fileLocalVarFileBytes []byte
fileLocalVarFormFileName = "file"
var fileLocalVarFile *os.File
if r.file != nil {
fileLocalVarFile = *r.file
}
if fileLocalVarFile != nil {
fbs, _ := _ioutil.ReadAll(fileLocalVarFile)
fileLocalVarFileBytes = fbs
fileLocalVarFileName = fileLocalVarFile.Name()
fileLocalVarFile.Close()
}
formFiles = append(formFiles, formFile{fileBytes: fileLocalVarFileBytes, fileName: fileLocalVarFileName, formFileName: fileLocalVarFormFileName})
var secondFileLocalVarFormFileName string
var secondFileLocalVarFileName string
var secondFileLocalVarFileBytes []byte
secondFileLocalVarFormFileName = "secondFile"
var secondFileLocalVarFile *os.File
if r.secondFile != nil {
secondFileLocalVarFile = *r.secondFile
}
if secondFileLocalVarFile != nil {
fbs, _ := _ioutil.ReadAll(secondFileLocalVarFile)
secondFileLocalVarFileBytes = fbs
secondFileLocalVarFileName = secondFileLocalVarFile.Name()
secondFileLocalVarFile.Close()
}
formFiles = append(formFiles, formFile{fileBytes: secondFileLocalVarFileBytes, fileName: secondFileLocalVarFileName, formFileName: secondFileLocalVarFormFileName})
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
if err != nil {
return localVarReturnValue, nil, err
}
localVarHTTPResponse, err := a.client.callAPI(req)
if err != nil || localVarHTTPResponse == nil {
return localVarReturnValue, localVarHTTPResponse, err
}
localVarBody, err := _ioutil.ReadAll(localVarHTTPResponse.Body)
localVarHTTPResponse.Body.Close()
localVarHTTPResponse.Body = _ioutil.NopCloser(bytes.NewBuffer(localVarBody))
if err != nil {
return localVarReturnValue, localVarHTTPResponse, err
}
if localVarHTTPResponse.StatusCode >= 300 {
newErr := GenericOpenAPIError{
body: localVarBody,
error: localVarHTTPResponse.Status,
}
return localVarReturnValue, localVarHTTPResponse, newErr
}
err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
if err != nil {
newErr := GenericOpenAPIError{
body: localVarBody,
error: err.Error(),
}
return localVarReturnValue, localVarHTTPResponse, newErr
}
return localVarReturnValue, localVarHTTPResponse, nil
}