Box: ファイルダウンロード

Box: ファイルダウンロード

Box: Download File

この工程は、Box 内の指定ファイルをダウンロードします。ファイル名を指定しない場合、Boxでのファイル名で保存されます。

Auto Step icon
Basic Configs
工程名
メモ
Configs for this Auto Step
conf_OAuth2
C1: OAuth2 設定 *
conf_FileId
C2: ダウンロードするファイルの ID *
conf_FileName
C3: ファイル名 (空白の場合、Boxでのファイル名で保存されます。)#{EL}
conf_Files
C4: ダウンロードファイルを追加保存するファイル型データ項目 *

Notes

  • ファイル ID は、URL に含まれています https://app.box.com/file/(ファイル ID)
  • Box のリフレッシュトークンには、期限があります

Capture

See also

Script (click to open)
  • 次のスクリプトが記述されている XML ファイルをダウンロードできます
    • box-file-download.xml (C) Questetra, Inc. (MIT License)
    • Professional のワークフロー基盤では、ファイル内容を改変しオリジナルのアドオン自動工程として活用できます

function main(){

  const oauth2 = configs.getObject("conf_OAuth2");

  const fileIdDef = configs.getObject("conf_FileId");
  let fileId = decideFileId(fileIdDef);

  let fileName = configs.get( "conf_FileName" );
  if(fileName === "" || fileName === null){
    // Boxでのファイル名を取得する
    fileName = getBoxFileName(oauth2, fileId);
  }

  const {contentType, content} = downloadBoxFile(oauth2, fileId);

  const filesDef = configs.getObject("conf_Files");  
  saveFile(filesDef, fileName, contentType, content);

}

/**
  * ダウンロードするファイルのIDをconfigから読み出して出力する
  * @param {String} fileIdDef
  * @return {String}  fileId ファイルの ID
  */
function decideFileId(fileIdDef){
  let fileId = "";
  if(fileIdDef === null){
    fileId = configs.get( "conf_FileId");
  }else{
    fileId = engine.findData(fileIdDef);
  }
  if(fileId === "" ||fileId === null) {
    throw "fileId is blank";
  }
  return fileId;
}

/**
  * Boxのファイル名を取得する
  * @param {AuthSettingWrapper} oauth2  OAuth2 認証設定
  * @param {String} fileId  ダウンロードするファイルのID
  * @return {String} jsonRes.name  Boxでのファイル名 
  */
function getBoxFileName(oauth2, fileId){
const url = `https://api.box.com/2.0/files/${fileId}/`;
  const response = httpClient.begin()
    .authSetting(oauth2)
    .get(url);
  const status = response.getStatusCode();
  const responseTxt = response.getResponseAsString();
  if (status !== 200) {
    engine.log(`${responseTxt}`);
    throw `Failed to get file name. status: ${status}`;
  }
  let jsonRes;
  try {
    jsonRes = JSON.parse(responseTxt);
  } catch(e) {
    engine.log("failed to parse as json");
    throw `Failed to get file name. status: ${status}`;
  }
return jsonRes.name;
}

/**
  * box API にファイルダウンロードの GET リクエストを送信し、レスポンスを返す
  * @param {AuthSettingWrapper} oauth2  OAuth2 認証設定
  * @param {String} folderId  ダウンロードするファイルのID
  * @return {Object} response
  * @return {String} response.contentType
  * @return {ByteArrayWrapper} response.content
  */
function downloadBoxFile(oauth2, fileId){
  
  const url = `https://api.box.com/2.0/files/${fileId}/content/`;
  const response = httpClient.begin()
    .authSetting(oauth2)
    .get(url);
  const status = response.getStatusCode();
  const responseTxt = response.getResponseAsString();

  if (status !== 200) {
    engine.log(`${responseTxt}`);
    throw `Failed to download file. 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 );

}

上部へスクロール

Questetra Supportをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む