【发布时间】:2016-11-19 10:54:45
【问题描述】:
案例:
在 Salesforce 平台上,我使用配置了 Apex Google Drive API 框架 的 Google Drive 来存储文件(本案例的图像)。所以 Google Drive API 处理 authToken 等等。我可以在我的应用程序中上传和浏览图像。就我而言,我想选择多个文件并将它们下载到一个 zip 文件中。到目前为止,我正在尝试使用 JSZip 和 FileSaver 库来做到这一点。使用下面相同的代码我可以压缩和下载存储在其他地方的具有正确响应头的多个文件,但由于 CORS 错误而不能从 GDrive。
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 Drive 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");
});
};
我还尝试将 GDrive 连接器添加的 let url = f.fileURL 更改为 let url = f.fileURL + '?alt=media'; 和 &access_token=CURRENT_TOKEN。
此链接由 GRDrive 连接器处理,因此如果我只是在浏览器中输入它,它会下载图像。但是,对于使用 JS 进行多次下载,我得到了 CORS 错误。
【问题讨论】:
标签: javascript google-drive-api salesforce apex jszip