我想不出任何方法可以做到这一点,但我仍然有点好奇是否有一些黑客行为。所以这是场景:
- 有我的服务器 X 和不同的服务器 Y。服务器 Y 根据输入参数生成各种报告,我的服务器 X 解析它们并可供下载。
- 因此,为了执行此操作,我可以访问服务器 Y 的 JSON API,并且可以轻松地在服务器 X 上使用 PHP Curl,但我想将此负载移至客户端,而不是将负载移至服务器 X 上。由于每个文件下载大约需要 1 到 2 秒(大小约为 2–3MB 及其 CSV 文件),并且每个用户可能有大约 100–200 个此类文件要下载,我认为如果大约有 20 个用户,这可能会使我的服务器 X 崩溃。
所以我想将从不同服务器下载 csv 的负载转移到客户端。我尝试过使用小程序,由于相同的跨源政策,它们将无法工作。和 javascript 我想不出任何下载它们的方法,因为没有任何选项可用于跨域问题。因此,我对任何类似 chrome 扩展或任何可以完成这项工作而不涉及我的服务器的东西持开放态度。
另外,如果我对服务器崩溃的假设不正确,请告诉我;我不确定,因为网络调用将被视为 I/O 以及网卡可以支持多少个线程。
编辑
我希望我的 Web 应用程序能够从服务器 Y 自行下载文件,而不涉及我的服务器 X。也就是说,我的 Web 客户端应该能够直接从第三方服务器下载内容,而不涉及我的服务器。
最佳答案
是 CSV 还是 JSON?
并不重要,无论哪种方式,您都有一个严重的问题需要解决。
我假设 API 请求通常是相同的下载。
我建议在发出 API 请求时将响应返回给用户,然后保存在本地。
使用 PHP 获取 CSV(或 JSON)数据,从而消除跨源资源共享问题。
当您在本地保存 CSV 时,您需要为其指定一个包含参数的唯一文件名。文件名中的字符数很便宜。
在发出 API 请求之前,请先使用
if(file_exists($filename))
文件命名约定,使用与API请求中相同的参数来命名文件。
$param['parm1name'] = 'param1';
$param['parm2name'] = 'param2';
$param['parm3name'] = 'param3';
$param['parm4name'] = 'param4';
$param['parm5name'] = 'param5';
$filename = '';
$query = '?';
foreach ($param as $key => $value){
$filename .= $value;
$query .= "$key=$value&";
}
$filename .= '.csv';
if (file_exists($filename)){
header('Content-Type: text/plain; charset=utf-8');
readfile($filename)
else{
$query = substr($query,0,-1); // remove trailing "&"
// do API request and return data to user
$fp = fopen($filename,'w');
fwrite($fp,$data);
fclose($fp);
}
关于java - 从不同服务器下载 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29998231/