[Herokuアドオン]TransloaditでFTPアップロード

アップロード先をFTPに指定する方法と、
その内容をテンプレート化するまでのメモ。

steps内のrobotで、/ftp/storeを指定する。
詳しいパラメータは以下。

6.3 Export to your FTP Server with the /ftp/export robot

設定ファイル部分は以下のようにした。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$transloadit->createAssemblyForm([
    'params' => [
        'steps' => [
            'export' => [
                'use' => ':original',
                'robot' => '/ftp/store',
                'user' => 'ユーザー名',
                'password' => 'パスワード',
                'host' => 'ホスト名',
                'path' => '/ディレクトリ/test.jpg'
            ]
        ],
        'redirect_url' => $redirectUrl
    ]
]);

フォームから入力されたファイルがアップロードされる。

  • export:ここは名前をつけているだけなので、なんでもよい。
  • use:どの時点のファイルを使用するか。:originalだとオリジナルのファイル。複数のパターンを指定する場合は配列で指定する。
    ただし、その場合、パスは1つしか指定出来ないので、後に書いたほうが上書きされる。
    (2つ書かないといけないと思われる)
  • user:ユーザー名
  • password:パスワード
  • host:ホスト
  • path:保存先のパス。ファイル名まで指定しないといけない

ファイル名は、${file.url_name}と指定することで、ユーザーが選択したファイル名でアップロード出来る。
この書き方の種類は以下にあった。
https://transloadit.com/docs/conversion-robots/#available-job-variables

実行後は即時にアップロードされるわけではなく、多少の処理が必要になるよう。
なので実際にはキューを出している状態。
数秒後にサーバー上にアップロードが行われる。

Executing

なので、クライアント側で完了を検知するには、transloaditから通知させるか(まだよくわかってない)、
定期的に確認しにいくか、などの処理が必要と思われる。

テンプレート化

上記の設定内容をテンプレート化して保存してみる。
テンプレート化することによってアカウント情報などをソース上から分離出来、セキュリティを高める効果があるよう。

herokuのアドオンからtranloaditの管理画面に遷移後、TEMPLATESを選択。
+NESをクリック。

Executing

で、以下のようにテンプレートを作成する。

1
2
3
4
5
6
7
8
9
10
11
12
{
  "steps": {
    "export": {
      "use": ":original",
      "robot": "/ftp/store",
      "user": "ユーザー名",
      "password": "パスワード",
      "host": "ホスト名",
      "path": "/ディレクトリ/${file.url_name}"
    }
  }
}

適当に名前をつけて保存。
保存後、テンプレートの一覧画面から、IDを確認できるようになるので、これを覚えておく。

Template list

で、このIDを使用して以下のように書き換える。

1
2
3
4
5
6
$transloadit->createAssemblyForm([
    'params' => [
        'template_id' => 'テンプレートのID',
        'redirect_url' => $redirectUrl
    ]
]);

これで実行すると上記のテンプレートが使用されて、FTPアップロードが行われる。
テンプレートを使用してアップロードした場合は、結果のリストにもその旨が表示される。

Assemblies

コード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
require '../vendor/autoload.php';

use transloadit\Transloadit;
$transloadit = new Transloadit([
    'key' => getenv('TRANSLOADIT_AUTH_KEY'),
    'secret' => getenv('TRANSLOADIT_SECRET_KEY')
]);

$response = Transloadit::response();
if ($response) {
    echo '<h1>Assembly status:</h1>';
    echo '<pre>';
    print_r($response);
    echo '</pre>';
    exit;
}

$redirectUrl = sprintf(
    'http://%s%s',
    $_SERVER['HTTP_HOST'],
    $_SERVER['REQUEST_URI']
);

echo $transloadit->createAssemblyForm([
    'params' => [
        'template_id' => 'テンプレートのID',
        'redirect_url' => $redirectUrl
    ]
]);

?>

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
</head>
<body>

<form method="post" action="upload_select_sample.php">
    <input name="example_upload" type="file" accept="image/*,video/*">
    <input type="submit" value="Upload">
</form>

</body>
</html>

参考

Store the originally uploaded files on your FTP server | Transloadit
How to use a template
Available job variables

   このエントリーをはてなブックマークに追加