es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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;
});
}
})
}

Tags:  , , , ,

Answer

  1. Avatar for 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:

    1. En primer lugar, verifica si tienes el token de autorización correcto para acceder a la API. Puedes generar el token desde el portal de DevOps.
    2. En segundo lugar, asegúrate de proporcionar el nombre de archivo correcto en la URL para crear el adjunto.

    3. También puedes intentar usar el método FileReader.readAsArrayBuffer() en lugar de FileReader.readAsBinaryString(). Esto devolverá un búfer de matriz en lugar de una cadena que se puede convertir a binario utilizando new Uint8Array().buffer. Esto puede garantizar que el contenido binario se cargue correctamente en el servidor de Azure.

    4. 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:

    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.onload = function () {
          var binaryContent = new Uint8Array(reader.result);
          formData.append('fileName', file.file.name);
          formData.append('uploadType', 'simple');
          formData.append('areaPath', 'NOMBRE_PROYECTO');
          formData.append('fileType', 'attachment');
          formData.append('content', new Blob([binaryContent], { type: 'application/octet-stream'}), file.file.name);
    
          const upload$ = self.http.post<any>(`https://dev.azure.com/NOMBRE_EMPRESA/NOMBRE_PROYECTO/_apis/wit/attachments?api-version=6.0`,
            formData, {
              headers: {
                "Authorization": "Basic TOKEN_AUTORIZACIÓN",
                'Content-Type': 'multipart/form-data',
              }
            }).subscribe((res) => {
              console.log(res)
              self.attachmentURLS.push(res.url);
              self.disabled = false;
            });
        }
        reader.readAsArrayBuffer(files);
      })
    }
    

    Nota: Reemplaza NOMBRE_EMPRESA y NOMBRE_PROYECTO con tus respectivos valores.

Comments are closed.