
Microsoft 365 OneDrive for Business: Download File
Microsoft 365 OneDrive for Business: ファイルダウンロード
This item downloads the specified file in OneDrive.
Basic Configs
- Step Name
- Note
Configs for this Auto Step
- conf_OAuth2
- C1: OAuth2 Setting *
- conf_FileUrl
- C2: File URL to download *
- conf_SaveAs
- C3: File Name (named with the file name in OneDrive if blank)#{EL}
- conf_Files
- C4: Data item to add the downloaded file *
Notes
- This Auto Step is for OneDrive for Business of Microsoft 365
- It does not work for OneDrive personal
- To get the URL of a file/folder on OneDrive, open the Details window of the file/folder by clicking the Information icon, proceed to “More details”, and click the icon next to “Path”

Capture

See Also
Script (click to open)
- An XML file that contains the code below is available to download
- onedrive-file-download.xml (C) Questetra, Inc. (MIT License)
- If you are using Professional, you can modify the contents of this file and use it as your own add-on auto step
// OAuth2 config sample at [OAuth 2.0 Setting]
// - Authorization Endpoint URL: https://login.microsoftonline.com/{your-tenant-id}/oauth2/v2.0/authorize
// - Token Endpoint URL: https://login.microsoftonline.com/{your-tenant-id}/oauth2/v2.0/token
// - Scope: https://graph.microsoft.com/Files.ReadWrite.All offline_access
// - Consumer Key: (Get by Microsoft Azure Active Directory)
// - Consumer Secret: (Get by Microsoft Azure Active Directory)
const GRAPH_URI = 'https://graph.microsoft.com/v1.0/';
function main() {
//// == 工程コンフィグの参照 / Config Retrieving ==
const oauth2 = configs.getObject('conf_OAuth2');
const fileUrl = retrieveFileUrl();
let saveAs = configs.get('conf_SaveAs');
const filesDef = configs.getObject('conf_Files');
//// == 演算 / Calculating ==
const {downloadUrl, fileName} = getFileInfoByUrl(oauth2, fileUrl);
const {contentType, content} = downloadFile(downloadUrl);
if (saveAs === '') {
saveAs = fileName;
}
//// == ワークフローデータへの代入 / Data Updating ==
saveFile(filesDef, saveAs, contentType, content);
}
/**
* config からファイル URL の値を読み出す
* ファイル URL が設定されていない場合はエラー
* @returns {String} fileUrl ファイル URL
*/
function retrieveFileUrl() {
const fileUrlDef = configs.getObject('conf_FileUrl');
let fileUrl = '';
if (fileUrlDef === null) {
fileUrl = configs.get('conf_FileUrl');
} else {
fileUrl = engine.findData(fileUrlDef);
}
if (fileUrl === null || fileUrl === '') {
throw 'File URL is blank.';
}
return fileUrl;
}
/**
* OneDrive のファイルのメタデータを取得し、JSONオブジェクトを返す
* APIの仕様: https://docs.microsoft.com/ja-jp/onedrive/developer/rest-api/api/shares_get?view=odsp-graph-online
* @param {AuthSettingWrapper} oauth2 OAuth2 設定情報
* @param {String} sharingUrl ファイルの共有 URL
* @returns {Object} ファイル情報 {fileName, downloadUrl}
*/
function getFileInfoByUrl(oauth2, sharingUrl) {
// encoding sharing URL
const encodedSharingUrl = encodeSharingUrl(sharingUrl);
// preparing for API Request
const response = httpClient.begin()
.authSetting(oauth2)
.queryParam('select', 'name,@microsoft.graph.downloadUrl')
.get(`${GRAPH_URI}shares/${encodedSharingUrl}/driveItem`);
const status = response.getStatusCode();
const responseStr = response.getResponseAsString();
if (status !== 200) {
engine.log(responseStr);
throw `Failed to get drive item. status: ${status}`;
}
const json = JSON.parse(responseStr);
const fileName = json.name;
const downloadUrl = json['@microsoft.graph.downloadUrl'];
if (downloadUrl === undefined) { // フォルダ URL を指定した場合など
throw 'Failed to get download url.';
}
return {fileName, downloadUrl};
}
/**
* 共有URLを unpadded base64url 形式にエンコードする
* @param {String} sharingUrl 共有URL
* @returns {String} encodedSharingUrl エンコードされた共有URL
*/
function encodeSharingUrl(sharingUrl) {
let encodedSharingUrl = base64.encodeToUrlSafeString(sharingUrl);
while (encodedSharingUrl.slice(-1) === '=') {
encodedSharingUrl = encodedSharingUrl.slice(0, -1);
}
return `u!${encodedSharingUrl}`;
}
/**
* ファイルをダウンロードする
* @param {String} downloadUrl ダウンロード URL
* @returns {Object} response
* @returns {String} response.contentType
* @returns {ByteArrayWrapper} response.content
*/
function downloadFile(downloadUrl) {
const response = httpClient.begin().get(downloadUrl);
const status = response.getStatusCode();
if (status !== 200) {
engine.log(response.getResponseAsString());
throw `Failed to download. status: ${status}`;
}
return {
contentType: response.getContentType(),
content: response.getResponse()
};
}
/**
* ダウンロードしたファイルを保存する
* @param {ProcessDataDefinitionView} filesDef 保存先データ項目
* @param {String} fileName 保存する際のファイル名
* @param {String} contentType
* @param {ByteArrayWrapper} content
*/
function saveFile(filesDef, fileName, contentType, content){
let files = engine.findData(filesDef);
if (files === null) {
files = new java.util.ArrayList();
}
const qfile = new com.questetra.bpms.core.event.scripttask.NewQfile(
fileName, contentType, content
);
files.add(qfile);
engine.setData(filesDef, files);
}