使用Ajax请求获取二进制文件并将其发布到Google云端硬盘

时间:2016-03-22 16:45:55

标签: javascript python ajax google-drive-api

我尝试使用Javascript将文件从本地计算机上传到Google云端硬盘。因此,我运行本地Web服务器(python中的 simpleHTTPServer ),然后我使用Ajax请求来获取文件。根据我的理解,响应应该是二进制流。然后,我尝试使用分段上传将此二进制流上传到Google云端硬盘。

我已尝试在网上找到几个版本,但所有版本都失败了。你可以在下面看到其中三个。结果,一个文件出现在Google云端硬盘中,其名称正确,但其内容只是一个文字说明了#34;对象Blob&#34;或&#34; Object Arraybuffer&#34;当我使用 blob arraybuffer 作为<= 0或使用responseType属性而没有指定responseText的空文件时。

我做错了什么? 提前谢谢。

responseType

另:

function uploadFile_multipart (foldername, filename) {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", foldername + filename, false);
    xmlhttp.overrideMimeType('text\/plain; charset=x-user-defined');
    xmlhttp.send();
    if (xmlhttp.status == 200) {
        var contentType = xmlhttp.getResponseHeader('Content-Type');
        var contentLength = xmlhttp.getResponseHeader('Content-Length');
        var contentData = xmlhttp.responseText;
        const boundary = 'foo_bar_baz';
        var multipartRequestBody = '--' + boundary + '\r\nContent-Type: application/json; charset=UTF-8\r\n\r\n' +
            '{ "name": "' + filename + '", "mimeType": "' + contentType + '" }\r\n\r\n--' + boundary +
            '\r\nContent-Type: ' + contentType + '\r\n\r\n' +
            contentData + '\r\n--' + boundary + '--';
        var request = gapi.client.request({
            'path': '/upload/drive/v3/files',
            'method': 'POST',
            'params': {'uploadType': 'multipart'},
            'headers': {'Content-Type': 'multipart/related; boundary=' + boundary, 'Content-Length': contentLength},
            'body': multipartRequestBody
        });
        request.execute(function(resp) { alert(resp); });
    }
}

又一个:

function uploadFile_multipart (foldername, filename) {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onload = function() {
            var contentType = xmlhttp.getResponseHeader('Content-Type');
            var contentLength = xmlhttp.getResponseHeader('Content-Length');
            var contentData = xmlhttp.response;
            const boundary = 'foo_bar_baz';
            var multipartRequestBody = '--' + boundary + '\r\nContent-Type: application/json; charset=UTF-8\r\n\r\n' +
                '{ "name": "' + filename + '", "mimeType": "' + contentType + '" }\r\n\r\n--' + boundary +
                '\r\nContent-Type: ' + contentType + '\r\n\r\n' +
                contentData + '\r\n--' + boundary + '--';
            var request = gapi.client.request({
                'path': '/upload/drive/v3/files',
                'method': 'POST',
                'params': {'uploadType': 'multipart'},
                'headers': {'Content-Type': 'multipart/related; boundary=' + boundary, 'Content-Length': contentLength},
                'body': multipartRequestBody
            });
            request.execute(function(resp) { alert(resp); });
    }
    xmlhttp.open("GET", foldername + filename, true);
    xmlhttp.responseType = "blob";
    xmlhttp.send();
}

0 个答案:

没有答案