初歩的な質問で申し訳ありませんが、
GASからGCSへの画像ファイルアップロード方法につきまして
どなたか教えていただけますと幸いです。
Google Driveにある画像ファイル(.jpg)をGASでGCSへアップロードしたい
- GAS(Google Apps Script)で、Google Driveに置いている画像ファイルをGCS(Google Cloud Storage)へアップロードするスクリプトを作成しました
- GCSへアップロードされたファイルはタイプ(image/jpeg)、サイズともにアップロード元と同じでしたが、GCS上で画像は表示されませんでした(画像ファイルを開くと真っ黒)
- GCSにアップロードされたファイルをローカルへダウンロードしても画像ファイルは開けませんでした
該当のソースコード
1function putImage() { 2 3 var token = "xxxxx"; 4 var url = "https://www.googleapis.com/upload/storage/v1/b/[bucket]/o?uploadType=media&name=[filename]"; 5 6 var params = { 7 headers : {'Authorization': 'Bearer '+ token, 8 'Content-Type': 'image/jpeg' 9 }, 10 method : "POST" 11 }; 12 13 var payload = { 14 'img' : "" 15 }; 16 params.payload = payload; 17 18 var imageFile = DriveApp.getFileById("xxxxxxxxxx").getBlob(); 19 20 params.payload.data = imageFile; 21 UrlFetchApp.fetch(url, params); 22 23}
試したこと
1.base64に変換
→ 表示が真っ黒なまま、アップロード後のファイルサイズが微妙に変化
Utilities.base64Encode(imageFile) //ファイルサイズが6Kから21Bに Utilities.base64Encode(imageFile.getBlob()) //ファイルサイズが6Kから17Bに Utilities.base64Encode(imageFile.getBlob().getBytes()) //ファイルサイズが6Kから8kに
2.画像ファイルの代わりにテキストファイルのアップロードを実行
→ ヘッダーとフッター?がファイルに追記されておりました。
これを追記させない方法がわかれば画像ファイルを正常にアップロードできるようになるのでしょうか。。
テキストファイルをアップロードしたときのコード
1function putText() { 2 3 var token = "xxxxx"; 4 var url = "https://www.googleapis.com/upload/storage/v1/b/[bucket]/o?uploadType=media&name=test.txt"; 5 6 var params = { 7 headers : {'Authorization': 'Bearer '+ token, 8 'Content-Type': 'text/plain' 9 }, 10 method : "POST" 11 }; 12 13 var payload = { 14 'data' : "" 15 }; 16 params.payload = payload; 17 18 var txtFile = DriveApp.getFileById("xxxxxxxxxx").getBlob(); 19 20 params.payload.data = txtFile; 21 UrlFetchApp.fetch(url, params); 22}
Google Drive上のファイル
hogehoge ほげ
GCSにアップロードされたファイル
-------5sgjWE3o58Jj3d1JoYfltflUCTLihGbNA1i62yylEXBWeHPv9b Content-Disposition: form-data; name="data"; filename="test.txt" Content-type: text/plain hogehoge ほげ -------5sgjWE3o58Jj3d1JoYfltflUCTLihGbNA1i62yylEXBWeHPv9b--
補足
GCSのドキュメントには、ファイルのアップロードは以下のように実行するとありました。
(--data-binary @[OBJECT]の部分がGASでどう書けばいいのかわかりませんでした)
curl -X POST --data-binary @[OBJECT] \ -H "Authorization: Bearer [OAUTH2_TOKEN]" \ -H "Content-Type: [OBJECT_CONTENT_TYPE]" \ "https://www.googleapis.com/upload/storage/v1/b/[BUCKET_NAME]/o?uploadType=media&name=[OBJECT_NAME]"
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。