如何使用node.js上传OneDrive API文件?



一段时间后,我终于弄清楚如何使用oAuth2以及如何使用刷新令牌创建访问令牌。但是我找不到上传文件的节点.js示例,我唯一找到的是这个模块 https://www.npmjs.com/package/onedrive-api

但这对我不起作用,因为我收到此错误 { 错误:{ 代码:"未经身份验证",消息:"身份验证失败" } }

另外,如果我输入访问令牌:手动使用"xxxxxxx",结果将是相同的。

但是我在上传访问令牌之前创建了访问令牌,所以我不知道这是否真的是一个无效的信用问题。但有趣的是,如果我从 https://dev.onedrive.com/auth/msa_oauth.htm 获取访问令牌,您可以在其中生成 1 小时的访问令牌,上传功能将起作用。我从这个问题中创建了我的身份验证。OneDrive 代码流 公共客户端无法发送客户端密码 - 节点.js 此外,我
只使用了范围 Files.readWrite.all 我可能需要允许一些其他范围吗?我的代码是

const oneDriveAPI = require('onedrive-api');
const onedrive_json_configFile = fs.readFileSync('./config/onedrive.json', 'utf8');
const onedrive_json_config = JSON.parse(onedrive_json_configFile);
const onedrive_refresh_token = onedrive_json_config.refresh_token
const onedrive_client_secret = onedrive_json_config.client_secret
const onedrive_client_id = onedrive_json_config.client_id



// use the refresh token to create access token
request.post({
url:'https://login.microsoftonline.com/common/oauth2/v2.0/token',
form: {
redirect_uri: 'http://localhost/dashboard',
client_id: onedrive_client_id,
client_secret: onedrive_client_secret,
refresh_token: onedrive_refresh_token,
grant_type: 'refresh_token'
}
}, function(err,httpResponse,body){
if (err) {
console.log('err: ' + err)
}else{
console.log('body full: ' + body)
var temp = body.toString()
temp = temp.match(/["]access[_]token["][:]["](.*?)["]/gmi)
//console.log('temp1: ', temp)
temp = temp.join("")
temp = temp.replace('"access_token":"','')
temp = temp.replace('"','')
temp = temp.replace('n','')
temp = temp.replace('r','')
//console.log('temp4: ', temp)

oneDriveAPI.items.uploadSimple({
accessToken: temp,
filename: 'box.zip',
parentPath: 'test',
readableStream: fs.createReadStream('C:\Exports\box.zip')
})
.then((item,body) => {
console.log('item file upload OneDrive: ', item); 
console.log('body file upload OneDrive: ', body); 
// returns body of https://dev.onedrive.com/items/upload_put.htm#response 
})
.catch((err) => {
console.log('Error while uploading File to OneDrive: ', err); 
});

} // else from if (err) { from request.post
}); // request.post({ get access token with refresh token

您能否将您的示例代码发送给我,以便使用 node.js 将文件上传到 OneDrive API。会很棒。谢谢

编辑:我也尝试上传一个文件

var uri = 'https://api.onedrive.com/v1.0/drive/root:/' + 'C:/files/file.zip' + ':/content'
var options = {
method: 'PUT',
uri: uri,
headers: {
Authorization: "Bearer " + accesstoken
},
json: true
};
request(options, function (err, res, body){
if (err) {
console.log('#4224 err:', err)
}
console.log('#4224 body:', body)
});

相同的代码:"未经身份验证"的东西:/

这个示例脚本怎么样?此示例的流程如下。

  1. 使用刷新令牌检索访问令牌。
  2. 使用访问令牌上传文件。

使用此示例时,请导入文件名、客户端 ID、客户端密码和刷新令牌。详细信息 https://dev.onedrive.com/items/upload_put.htm。

示例脚本:

var fs = require('fs');
var mime = require('mime');
var request = require('request');
var file = 'c:/Exports/box.zip'; // Filename you want to upload on your local PC
var onedrive_folder = 'samplefolder'; // Folder name on OneDrive
var onedrive_filename = 'box.zip'; // Filename on OneDrive
request.post({
url: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
form: {
redirect_uri: 'http://localhost/dashboard',
client_id: onedrive_client_id,
client_secret: onedrive_client_secret,
refresh_token: onedrive_refresh_token,
grant_type: 'refresh_token'
},
}, function(error, response, body) {
fs.readFile(file, function read(e, f) {
request.put({
url: 'https://graph.microsoft.com/v1.0/drive/root:/' + onedrive_folder + '/' + onedrive_filename + ':/content',
headers: {
'Authorization': "Bearer " + JSON.parse(body).access_token,
'Content-Type': mime.lookup(file),
},
body: f,
}, function(er, re, bo) {
console.log(bo);
});
});
});

如果我误解了你的问题,我很抱歉。

最新更新