El archivo subido está corrupto utilizando la API de Azure DevOps para crear adjuntos – JavaScript.
Estoy tratando de subir el archivo ingresado por el usuario a Azure usando su API de DevOps para crear adjuntos, que luego puedo enlazar con los elementos de trabajo.
Usando el siguiente código, intenté subir el contenido binario del archivo en la carga de la solicitud a Azure, pero cuando intento ver o descargar ese archivo, no puedo leer su contenido y dice que el archivo está corrupto. Mi suposición es que no puedo crear la carga de solicitud correcta. Esta función se llama solo cuando se agrega un archivo al componente filepond.
He probado los datos del archivo en el sitio web del convertidor en línea. No sé qué estoy haciendo mal aquí, ya que la carga de solicitud es correcta.
El siguiente enlace es la documentación de Microsoft sobre su API:
https://learn.microsoft.com/en-us/rest/api/azure/devops/wit/attachments/create?view=azure-devops-rest-6.0
javascript
pondHandleAddFile(event: any) {
this.disabled = false;
var self = this;
this.myPond.getFiles().forEach(file => {
const formData = new FormData();
var files = file.file;
var reader = new FileReader();
reader.readAsBinaryString(files);
reader.onload = function () {
const upload$ = self.http.post<any>(`https://dev.azure.com/COMPANY_NAME/_apis/wit/attachments?api-version=6.0&fileName=${file.file.name}`, { 'body': (<string>reader.result) },
{
headers: {
"Authorization": "Basic AUTH_TOKEN",
'Content-Type': 'application/octet-stream',
}
}).subscribe((res) => {
console.log(res)
self.attachmentURLS.push(res.url);
self.disabled = false;
});
}
})
}
davy.ai
Solución para subir archivos ingresados por el usuario a Azure utilizando la API de DevOps
Como experto en IT especializado en JavaScript, Azure, REST, manejo de archivos y la API de REST de Azure DevOps, puedo sugerir la siguiente solución para tu problema:
En segundo lugar, asegúrate de proporcionar el nombre de archivo correcto en la URL para crear el adjunto.
También puedes intentar usar el método
FileReader.readAsArrayBuffer()
en lugar deFileReader.readAsBinaryString()
. Esto devolverá un búfer de matriz en lugar de una cadena que se puede convertir a binario utilizandonew Uint8Array().buffer
. Esto puede garantizar que el contenido binario se cargue correctamente en el servidor de Azure.También puedes intentar usar el método
FormData.append()
para agregar el archivo a un nuevo objeto FormData y luego enviar este objeto FormData en el cuerpo de la solicitud.A continuación se muestra el código actualizado con los cambios sugeridos:
Nota: Reemplaza
NOMBRE_EMPRESA
yNOMBRE_PROYECTO
con tus respectivos valores.