PHPなどのサーバーサイドのプログラムなしにクライアントのJSだけでCloudinaryにアップロードしてみた。
情報
Cloudinaryの情報として必要なものは以下。
- Upload Presets Name(unsigned)
- Cloud Name
Upload Presets Name
Cloudinaryへアップロードする際に、サイズや形式、フィルターなどをプリセットとして登録しておける。
unsigned アップロード、というのは、たぶん、プリセット名とCloudinaryの名前さえわかっていれば認証なしでアップロード出来る、というものっぽい。
これは、予め設定画面から有効にしてやる必要がある。
Settings
の、Upload
タブを開くと、Upload presets
という項目があるので、そこで、Enable unsigned uploading
をクリック。
有効となると情報が表示されるので、Name
をメモっておく。
Cloud Name
Dashboard
に表示されているので、メモっておく。
ライブラリ
Cloudinaryが作成しているjQuery File Upload用のライブラリがあるのでそちらを利用する。
先頭でもろもろ読み込む。
1
2
3
4
5
| <script src='jquery.min.js' type='text/javascript'></script>
<script src='jquery.ui.widget.js' type='text/javascript'></script>
<script src='jquery.iframe-transport.js' type='text/javascript'></script>
<script src='jquery.fileupload.js' type='text/javascript'></script>
<script src='jquery.cloudinary.js' type='text/javascript'></script>
|
全部CDNでやった場合は以下。
公式にはCDNはないので本番の案件では使わない方が無難かも。
1
2
3
4
5
| <script src='//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js' type='text/javascript'></script>
<script src="//code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>
<script src='//cdnjs.cloudflare.com/ajax/libs/jquery.iframe-transport/1.0.1/jquery.iframe-transport.min.js' type='text/javascript'></script>
<script src='//cdnjs.cloudflare.com/ajax/libs/blueimp-file-upload/9.18.0/js/jquery.fileupload.min.js' type='text/javascript'></script>
<script src='//cdnjs.cloudflare.com/ajax/libs/cloudinary-jquery-file-upload/2.3.0/cloudinary-jquery-file-upload.min.js' type='text/javascript'></script>
|
※バージョンは記事投稿現在(2017/4/11)での最新版(jQueryは古い)
アップロードフォーム
inputタグを自動生成
単純にアップロードするだけなら、自動でinputタグを挿入してくれる関数がある。
[HTML]
1
| <div class="upload_form"></div>
|
[JS]
1
2
3
| $(function () {
$('.upload_form').append($.cloudinary.unsigned_upload_tag("preset-name-here", { cloud_name: 'cloud-name-here' }));
});
|
ライブラリを読み込んで、これでappend
すれば、自動的に、<input>
タグが挿入される。
そこでファイルを選択すれば、アップロードが行われる。
(選ぶだけでアップロードされる)
以下のようなHTMLが挿入される。
1
| <input type="file" name="file" class="cloudinary_fileupload">
|
bind
アップロードされた後や、アップロード中に処理をおこないたい場合は、bind
する。
そのために、自分で<input>
タグを作っておき、そのタグにたいしてbind
する。
[HTML]
1
2
3
| <input type="file" name="file" id="upload_form" />
<div class="progress"></div>
<div class="thumbnails"></div>
|
[JS]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| $(function () {
$.cloudinary.config({ cloud_name: 'cloud_name_here'});
$('#upload_form').unsigned_cloudinary_upload('preset_name_here',
{ cloud_name: 'cloud_name_here', tags: 'browser_uploads' },
{ multiple: true }
)
.bind('cloudinaryprogress', function(e, data) {
$('.progress').text('アップロード中...');
})
.bind('cloudinarydone', function(e, data) {
$('.progress').text('完了');
$('.thumbnails').append($.cloudinary.image(data.result.public_id,
{ format: 'jpg', width: 150, height: 100, crop: 'thumb' } ));
}
);
});
|
cloudinaryprogress
がアップロード中の処理。アップロード中、というテキストを表示しているだけ。
cloudinarydone
がアップロード後の処理。完了、と表示させ、サムネイルを取得して表示している。
$.cloudinary.image(name, option)
で画像を取得して表示させることが可能。
冒頭でcloud_name
を設定している。
data.result.public_id
でアップロードしたファイルのIDが取得可能。
ファイルのURLを直接参照したい場合は以下。
1
| $.cloudinary.url(data.result.public_id);
|
第二引数でサイズやクロップなどのオプションを指定してやることが可能。
注意
注意点としては、ファイルの選択を行っただけでアップロードが開始されてしまうところ。
これを送信ボタンをクリックした時にアップロードを開始するようには変更出来るのだろうか…。
ライブラリに手を入れないと無理な気もする…。
参考
公式
コードの参考
コード全文
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
| <!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<script src='https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js' type='text/javascript'></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery.iframe-transport/1.0.1/jquery.iframe-transport.min.js' type='text/javascript'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/blueimp-file-upload/9.18.0/js/jquery.fileupload.min.js' type='text/javascript'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/cloudinary-jquery-file-upload/2.3.0/cloudinary-jquery-file-upload.min.js' type='text/javascript'></script>
<script>
$(function () {
$.cloudinary.config({ cloud_name: 'cloud_name_here'});
$('#upload_form').unsigned_cloudinary_upload('preset_name_here',
{ cloud_name: 'cloud_name_here', tags: 'browser_uploads' },
{ multiple: true }
)
.bind('cloudinaryprogress', function(e, data) {
$('.progress').text('アップロード中...');
})
.bind('cloudinarydone', function(e, data) {
$('.progress').text('完了');
$('.thumbnails').append($.cloudinary.image(data.result.public_id,
{ format: 'jpg', width: 150, height: 100, crop: 'thumb' } ));
var direct_url = $.cloudinary.url(data.result.public_id);
}
);
});
</script>
<title>Cloudinary Upload Sample</title>
</head>
<body>
<h1>Cloudinary Upload Test</h1>
<div><input type="file" name="file" id="upload_form" /></div>
<div class="progress"></div>
<div class="thumbnails"></div>
</body>
</html>
|