Permettre de téléverser plusieurs fichiers à la fois dans admin-upload #182

Merged
vlbeaudoin merged 12 commits from feature/upload-plusieurs-documents into main 2023-12-19 19:50:50 -05:00
Showing only changes of commit 92886a8b8b - Show all commits

View file

@ -12,9 +12,13 @@ import (
) )
/* /*
V1DocumentPOST permet d'ajouter un object dans un bucket, par multipart/form-data V1DocumentsPOST permet d'ajouter un object dans un bucket, par multipart/form-data
WIP Example:
Téléverser plusieurs fichiers à cette route avec `curl`:
curl <endpoint> -F 'documents=@example.pdf' -F 'documents=@example.md;type=text/markdown'
*/ */
func (h *V1Handler) V1DocumentsPOST(c echo.Context) (err error) { func (h *V1Handler) V1DocumentsPOST(c echo.Context) (err error) {
var request apirequest.V1DocumentsPOST var request apirequest.V1DocumentsPOST
@ -22,19 +26,36 @@ func (h *V1Handler) V1DocumentsPOST(c echo.Context) (err error) {
request.Params.Bucket = c.Param("bucket") request.Params.Bucket = c.Param("bucket")
var allowed bool
for allowedBucket := range h.Config.Server.Documents.Buckets {
if request.Params.Bucket == allowedBucket {
allowed = true
}
}
if !allowed {
return c.JSON(apiresponse.NotFoundResponse())
}
form, err := c.MultipartForm() form, err := c.MultipartForm()
if err != nil { if err != nil {
response.StatusCode = http.StatusBadRequest
response.Message = fmt.Sprintf("Téléversement invalide: %s", err) response.Message = fmt.Sprintf("Téléversement invalide: %s", err)
response.StatusCode = http.StatusBadRequest
return c.JSON(response.StatusCode, response) return c.JSON(response.StatusCode, response)
} }
if form == nil { if form == nil {
return c.JSON(http.StatusBadRequest, "MultipartForm pointer vers une addresse mémoire nil") response.Message = "MultipartForm pointe vers une addresse mémoire nil"
response.StatusCode = http.StatusBadRequest
return c.JSON(response.StatusCode, response)
} }
if len(form.File) == 0 { if len(form.File) == 0 {
return c.JSON(http.StatusBadRequest, "Veuillez sélectionner au moins 1 document à téléverser") response.Message = "Veuillez sélectionner au moins 1 document à téléverser"
response.StatusCode = http.StatusBadRequest
return c.JSON(response.StatusCode, response)
} }
for inputName, inputFileHeaders := range form.File { for inputName, inputFileHeaders := range form.File {
@ -44,16 +65,22 @@ func (h *V1Handler) V1DocumentsPOST(c echo.Context) (err error) {
} }
if request.Data.Documents == nil { if request.Data.Documents == nil {
return c.JSON(http.StatusBadRequest, "Impossible d'obtenir les documents depuis le formulaire") response.Message = "Impossible d'obtenir les documents depuis le formulaire"
response.StatusCode = http.StatusBadRequest
return c.JSON(response.StatusCode, response)
} }
if !request.Complete() { if !request.Complete() {
return c.JSON(http.StatusBadRequest, "Requête V1DocumentsPOST incomplète reçue") response.Message = "Requête V1DocumentsPOST incomplète reçue"
response.StatusCode = http.StatusBadRequest
return c.JSON(response.StatusCode, response)
} }
response.StatusCode, response.Message = h.MediaClient.UploadFormFiles(request.Data.Documents) response.StatusCode, response.Message = h.MediaClient.UploadFormFiles(request.Params.Bucket, request.Data.Documents)
return c.JSON(response.StatusCode, response.Message) return c.JSON(response.StatusCode, response)
} }
// V1DocumentPOST permet d'ajouter un object dans un bucket, par multipart/form-data // V1DocumentPOST permet d'ajouter un object dans un bucket, par multipart/form-data