2017-03-23 3 views
4

Zunächst erlauben Sie mir, mich zu entschuldigen, wenn nichts von dem, was ich sagen werde, einen Sinn ergibt. Ich bin hier außerhalb meiner Komfortzone und weiß nicht wirklich, was ich mache. Mit diesem sagte ...Erstellen einer Datei aus einer XMLHttpRequest -Objektantwort

Ich benutze die Google Drive File Picker library, um Benutzern zu erlauben, ihren Lebenslauf von ihrem Google Drive hochzuladen.

function downloadGDriveFile(file) { 
    if (file.downloadUrl) { 
     var accessToken = gapi.auth.getToken().access_token; 
     var xhr = new XMLHttpRequest(); 
     xhr.open('GET', file.downloadUrl); 
     xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); 
     xhr.onload = function() { 
      var content = xhr.response; 
      console.log(xhr); 

      form_element = document.getElementById("new_guest_application"); 
      form_data = new FormData(form_element); 
      new_file = new File([content], file.title, {type: file.mimeType}); 
      form_data.append('guest_application[curriculum_vitae]', new_file); 
      console.log(new_file); 

      var request = new XMLHttpRequest(); 
      request.open("POST", form_element.action); 
      request.send(form_data); 

     }; 
     xhr.onerror = function() { 
      alert('Download failure.'); 
     }; 
     xhr.send(); 
    } 
    else { 
     alert('Unable to download file.'); 
    } 
} 

den oben stehenden Code verwenden, ich nehme das ausgewählte file Objekt und deren Verwendung, zusammen mit den entsprechenden Header-Token, die content der Datei zum Download bereit. Dies scheint zu funktionieren wie beabsichtigt.

Mein Problem kommt dann, wenn ich versuche, besagten Inhalt in eine File umzuwandeln, um sie an ein Formular anzuhängen und an meinen Server zu senden.

Der obige Code funktioniert, sofern eine Datei vom Server akzeptiert und entsprechend hochgeladen wird, diese Datei jedoch beschädigt ist. Ich könnte mir vorstellen, dass das daran liegt, dass ich etwas falsch mache mit der file = new File([content], file.title, {type: file.mimeType}); Linie, aber ich bin so weit außerhalb meiner Komfortzone, dass ich nicht einmal weiß wo ich anfangen soll.

(ich weiß nicht viel tun, JavaScript in der Regel, und haben nur diese schaffte es weit mit einer gesunden Dosis von copy/paste trial and error)

Kann mir jemand helfen? Vielen Dank.

+0

Daniel lesen, sollten Sie wahrscheinlich zeigen, wie Sie auch Datei-Upload auf der Serverseite behandeln. Außerdem macht es Sinn, einen Test mit einer einfachen Textdatei mit bekanntem Inhalt (wie "123456qwerty") auszuführen und zu sehen, wie genau Ihre Datei beschädigt ist. Auf den ersten Blick sieht Ihr Client-Code OK aus. – SergGr

Antwort

2

xhr.response gibt einige Daten zurück, die in Abhängigkeit vom in xhr.responseType definierten Datentyp formatiert sind. Wenn Sie binäre Daten übertragen und responseType auf einen Texttyp eingestellt ist, sind Ihre Daten beschädigt.

Sie können versuchen, xhr.responseType einfach außer Kraft zu setzen, bevor die Antwort

xhr.responseType = "arraybuffer"; 
var content = xhr.response; 
Verwandte Themen