ケース: Salesforceプラットフォームの場合Googleドライブを使用して、Apex GoogleドライブAPIフレームワークを含むファイル(このケースの画像)を保存します。そのため、GoogleドライブAPIはauthTokenなどを処理します。私は自分のアプリケーションで画像をアップロードし閲覧することができます。私の場合、複数のファイルを選択して1つのzipファイルでダウンロードしたいと考えています。今のところ私はJSZip
とFileSaver
のライブラリを使ってそれをしようとしています。同じコードを以下のとすると、適切な応答ヘッダーを使用して別の場所に保存された複数のファイルを圧縮してダウンロードできますが、CORSエラーのためGDriveからはダウンロードできません。SalesforceでJSZipを使用してGoogleドライブから複数のファイルをダウンロードする方法
https://xxx.salesforce.com/contenthub/download/XXXXXXXXXX%3Afile%XXXXXX_XXXXXXXXX. No'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://xxx.visual.force.com' is therefore not allowed access.
このリンクをクリックするだけで、ファイルのダウンロードが開始されます。
GDriveを設定して応答ヘッダーを有効にする方法はありますか:Access-Control-Allow-Origin: *
またはAccess-Control-Allow-Origin: https://*/mydomain.com
どういうわけか、または別のもの、多分サーバー側の圧縮を使用する必要がありますか? Apex GoogleドライブAPI(以下のようになります: https://xxx.salesforce.com/contenthub/download/XXXXXXXXXXX%3Afile%XXXXXXXX
)で提供されているダウンロードリンクを使用しています。src="fileURL"
として使用したり、ブラウザに直接貼り付けたりすると問題なく動作します。 GDriveコネクタに 'accesToken'などを追加します。
マイコード:
//ajax request to get files using JSZipUtils
let urlToPromise = (url) =>{
return new Promise(function(resolve, reject) {
JSZipUtils.getBinaryContent(url, function (err, data) {
if(err) {
reject(err);
} else {
resolve(data);
}
});
});
};
this.downloadAssets =() => {
let zip = new JSZip();
//here 'selectedAssets' array of objects each of them has 'assetFiles'
//with fileURL where I have url. Download and add them to 'zip' one by one
for (var a of this.selectedAssets){
for (let f of a.assetFiles){
let url = f.fileURL;
let name = a.assetName + "." + f.fileType;
let filename = name.replace(/ /g, "");
zip.file(filename, urlToPromise(url), {binary:true});
}
}
//generate zip and download using 'FileSaver.js'
zip.generateAsync({type:"blob"})
.then(function callback(blob) {
saveAs(blob, "test.zip");
});
};
私もlet url = f.fileURL + '?alt=media';
とGDriveコネクタによって追加&access_token=CURRENT_TOKEN
にlet url = f.fileURL
を変更しようとしました。
このリンクはGRDriveコネクタで処理されますので、ブラウザに入力すれば画像がダウンロードされます。しかし、JSを使用して複数回ダウンロードすると、CORSエラーが発生します。
私はGDriveから複数のファイルを直接ダウンロードすることはできませんでした。私はAJAXリクエストでここで一度に一つのファイルをダウンロードしようとしています。 'urlToPromise =(url)'。私がしようとしていることは次のとおりです: 1.一つのファイルをダウンロードしてください 2.一つのファイルにZipファイルを入れてください(JavaScriptを使ってクライアント側で) 3. 'zip'をダウンロードしてください GDrive自体のようなものが必要ですzip形式で複数のファイルをダウンロードする。 –