アプリAの添付ファイルに登録した画像ファイルを、アプリBの添付ファイルに自動的にコピーして登録するということをやりたいと思っています。
・ファイルアップロードで必須となる3つの手順
https://cybozudev.zendesk.com/hc/ja/articles/200724665
上記ページを参考に、アプリAのJavaScriptで、以下のようなプログラムを組んでみました。
1.fileKeyの取得
2.ファイルのダウンロード
3.2.のファイルをFormData型に格納
4.ファイルをアップロードしてアップロード時のfileKeyを取得
5.アプリBの添付ファイルにアップロード時のfileKeyを登録
エラーも出ず動作しているのですが、アプリBの該当レコードを見ると、画像のプレビューが表示されない(枠だけが表示される壊れ画像のような)状態になってしまいます。
以下、2,3,4のところのコードだけ抜粋します。
※filekey, contentType, filenameは予め取得済み
var url = ‘/k/v1/file.json?fileKey=’ + filekey;
var xhr = new XMLHttpRequest();
xhr.open(‘GET’, url, false);
xhr.setRequestHeader(‘X-Requested-With’ , ‘XMLHttpRequest’);
xhr.setRequestHeader(“Accept-Charset”, “x-user-defined”);
xhr.onreadystatechange = function(event){
if ((xhr.readyState == 4) && (xhr.status == 200)){
var blob = new Blob([xhr.response], {type:contentType});
var formData = new FormData();
formData.append(" REQUEST_TOKEN", kintone.getRequestToken());
formData.append(“file”, blob , filename);
var xmlHttp = new XMLHttpRequest();
xmlHttp.open(“POST”, encodeURI(‘/k/v1/file.json’), false);
xmlHttp.setRequestHeader(‘X-Requested-With’, ‘XMLHttpRequest’);
xmlHttp.responseType = ‘multipart/form-data’;
xmlHttp.send(formData);
var key = JSON.parse(xmlHttp.responseText).fileKey;
}
};
xhr.send();
尚、kintoneでは画像部分にマウスオーバーするとファイル名とファイルサイズが表示されますが、アプリAでのサイズよりもアプリBの方のサイズが大きくなってしまっているので、バイナリの形で正しくアップロードできていないのではないかと思われます。
上記コードではダウンロードしたファイルデータ xhr.response をそのまま
var blob = new Blob([xhr.response], {type:contentType});
でBlobにしてアップロードしており、たぶんこの辺りがダメな部分ではないかと思っていますが、そもそもこういうやり方で良いのか?添付ファイルを別アプリにコピーする他のやり方があるのか?ということや、上記のようなやり方でJavaScript経由でバイナリデータを正しくアップロードする方法があるのか?といった辺りをアドバイスいただきたく思っています。
宜しくお願いします。