Workatoで任意のURLに対してファイルのダウンロードとアップロードを行うには


## ファイルのダウンロード
HTTPコネクターを追加し、以下の通り設定を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/bf658869-29f9-276b-d3d5-79c25b7ffe65.png)

### 入力値
※以下に無い項目はデフォルトのままとします

|項目                 |値                                             |
|:-------------------:|:---------------------------------------------:|
|Request name         |アクション名（任意の名称）                       |
|Method	HTTP          |HTTPリクエストメソッドを指定（GET,POST,PUTなど） |
|Request URL          |ダウンロード先URLを指定                         |
|Response content type|Binary                                        |

### 戻り値
|項目                 |値                                             |
|:-------------------:|:---------------------------------------------:|
|headers	      |レスポンスヘッダー                               |
|response             |レスポンスボディ ※ダウンロードファイルのバイナリデータが返されます|
|Status code          |HTTPステータスコード                             |
|Error                |エラーメッセージ                             |
|Body                 |レスポンスボディ （responseと同じ）               |                           

### 参考情報
- Handling binary files
  - https://docs.workato.com/features/handling-binary-files.html

## ファイルのアップロード
Rubyコネクターでファイルのアップロードが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/59ea69ba-d081-2e60-da3e-a1acd8f5e05a.png)


### 入力値
※以下に無い項目はデフォルトのままとします

|項目    |値                                                   |
|:-------|:--------------------------------------------------:|
|Name	 |アクション名（任意の名称）                             |
|url     |アップロード先URL（POST/PUT先となるURL）               |
|method  |HTTPメソッド（postまたはput）※大文字小文字どちらでもOK |
|data	 |アップロードデータ（バイナリデータ等）                  |
|values  |POST引数（2次元のJSONテキストをセットする）             |


### コード
```ruby
# 初期化および引数を変数に代入
res = {}
url = input['url']
data = input['data']
method = input['method']
file_name = input['file_name']
values = input['values']
 
# パラメータ設定（アップロードファイル）
params  = {
  file: [
    data,
    'application/octet-stream',
    file_name
  ]
}
 
# valuesがセットされている場合の処理
# input['values']はJSONがセットされる想定
if values.present? 
  values_json_parsed = parse_json(values)
  params = params.merge(values_json_parsed)
end
 
if method.downcase == 'post'
  # POSTリクエスト
  res = post(url)
    .request_format_multipart_form
    .payload(params)
    .response_format_raw
    .after_response do |code, body, headers|
      {
        code: code,
        body: body
      }
    end
elsif method.downcase == 'put'
  # PUTリクエスト
  res = put(url)
    .request_format_multipart_form
    .payload(params)
    .response_format_raw
    .after_response do |code, body, headers|
      {
        code: code,
        body: body
      }
    end
end
 
# 結果を返す
{
  res: res
}
```

### 戻り値
|項目                 |値                                             |
|:-------------------:|:---------------------------------------------:|
|res.code	      |HTTPステータスコード|
|res.body             |レスポンスボディ|

### 参考情報

- HTTP Methods
 - https://docs.workato.com/developing-connectors/sdk/sdk-reference/http.html
- Available Ruby Methods
 - https://docs.workato.com/developing-connectors/sdk/sdk-reference/ruby_methods.html
- How-to guides -Multipart Form
 - https://docs.workato.com/developing-connectors/sdk/guides/data-formats/request_format_multipart_form.html