使用OneDrive Rest Api上传jpg时出现问题

时间:2014-05-02 00:08:53

标签: rest onedrive

对于这个HTML5手机应用程序,我必须使用OneDrive REST API。

我设法上传了该文件,但服务器上的文件不是.jpg格式,也不会显示在jpg查看器中。通过REST API登录并获取令牌后,我使用XMLHttpRequest来输出文件。我已经尝试将其作为ArrayBuffer和base64编码的字符串传递。在每种情况下,文件都在那里,但没有正确解码。我想我需要告诉网络服务器如何使用“request.setRequestHeader('Content-Type','image / jpg')”来解码文件,但是我从OneDrive服务器收到以下错误消息:

“错误”:{       “code”:“request_body_invalid_media_type”,       “message”:“不支持Content-Type标题'text / plain'。”    }

this.uploadFile = function (token, fileUri,fileName, fileTools, success, fail) {

    var me = app.log('||Microsoft.uploadFile||');

    fileTools.readFileContent(fileUri, 'dataUrl', gotData, fileError);

    function fileError(err) {
        app.logError(me + '::fileError:::' + err);
    }

    function gotData(base64String) {

        var request = new XMLHttpRequest;

        app.log(me + '::token::' + token);

        request.open("PUT", "https://apis.live.net/v5.0/me/skydrive/files/" + fileName + "?access_token=" + token, true);           
        request.setRequestHeader('Content-Type', 'text/plain');
        //request.setRequestHeader('Content-Type', 'image/jpg');
        //request.setRequestHeader('Content-Transfer-Encoding', 'base64;charset=utf-8');

        request.onload = function (e) {

            app.log(request.responseText);

            success(e);
        };

        request.onerror = function (e) {

            app.log(me + '::7::');

            fail(e.error.message);
        };

        app.log(me + '::8::' + base64String.substr(0,100));

        var b = new Base64Stuff();          

        var aBuffer = b.base64ToBuffer(b.removeBase64jpgHeader(base64String));

        request.send(aBuffer);

        //request.send(base64String);
    }
}

1 个答案:

答案 0 :(得分:1)

request.setRequestHeader('Content-Type', '');