En una aplicación web, es común recibir tanto archivos como datos JSON en una solicitud HTTP. Para procesar con éxito estos elementos, es esencial comprender cómo analizarlos de manera efectiva.
Considere un escenario en el que tiene una interfaz AngularJS que envía una solicitud a un backend de Go. La solicitud contiene un archivo ("file") y datos JSON ("doc"). Su objetivo es analizar tanto el archivo PDF como los datos JSON de esta solicitud.
Para resolver este problema, debe procesar por separado tanto el archivo como los datos JSON. Al utilizar http.(*Request).MultipartReader() e iterar sobre las partes usando NextPart(), puede extraer y analizar cada elemento.
mr, err := r.MultipartReader()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
Para cada parte de la solicitud de varias partes:
part, err := mr.NextPart()
if err == io.EOF {
break
}
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
Si la parte es un archivo (part.FormName() == "file"):
outfile, err := os.Create("./docs/" part.FileName())
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
defer outfile.Close()
_, err = io.Copy(outfile, part)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
Si la pieza contiene datos JSON (part.FormName() == "doc"):
jsonDecoder := json.NewDecoder(part)
err = jsonDecoder.Decode(&doc)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
Después de analizar tanto el archivo como los datos JSON, puede realizar cualquier posprocesamiento necesario, como guardarlo en una base de datos o enviar una respuesta al cliente. .
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3