zeqk
3/29/2018 - 2:06 PM

filestream to blob

como no se puede setear el responseType (https://developers.google.com/web/updates/2012/01/Getting-Rid-of-Synchronous-XHRs) en una peticion sincronica, se debe convertir la respuesta

Fuente: https://developer.mozilla.org/es/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest

var xhr = new XMLHttpRequest();

xhr.open("GET", url, false); //sync

if(token)
    xhr.setRequestHeader("authorization", "Bearer " + token);

xhr.overrideMimeType('text\/plain; charset=x-user-defined'); //the magic line

xhr.send();

if(xhr.status == 200) {

    var disposition = xhr.getResponseHeader('content-disposition');
    var fileName = "";
    if (disposition && disposition.indexOf('attachment') !== -1) {
        let filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
        let matches = filenameRegex.exec(disposition);
        if (matches != null && matches[1]) {
            fileName = matches[1].replace(/['"]/g, '');
        }
    }
    var type = xhr.getResponseHeader('Content-Type');

    var bytes = new Uint8Array(xhr.response.length);
    for (var i=0; i<xhr.response.length; i++)
        bytes[i] = xhr.response.charCodeAt(i);

    var rv = {
        blob: new Blob([bytes], { type: type }),
        fileName: fileName
    };

    return rv;
}
else {
    var ex = this._errorResponseToException(xhr);
    throw ex;
}