Java 从不同服务器下载csv文件
我想不出任何方法可以做到这一点,但我仍然有点好奇,是否有一些黑客。下面是一个场景:Java 从不同服务器下载csv文件,java,javascript,php,csv,Java,Javascript,Php,Csv,我想不出任何方法可以做到这一点,但我仍然有点好奇,是否有一些黑客。下面是一个场景: 有我的服务器X和不同的服务器Y。服务器Y根据输入参数生成各种报告,我的服务器X解析它们并使它们可供下载 因此,为了执行此操作,我可以访问服务器Y的JSON API,我可以在服务器X上轻松地使用PHP Curl,但我想将此负载移动到客户端,而不是在服务器X上加载。因为每个文件下载大约需要1到2秒(大小约为2–3MB及其CSV文件),每个用户可能有大约100-200个这样的文件要下载,如果大约有20个用户,这可能会
- 有我的服务器X和不同的服务器Y。服务器Y根据输入参数生成各种报告,我的服务器X解析它们并使它们可供下载李>
- 因此,为了执行此操作,我可以访问服务器Y的JSON API,我可以在服务器X上轻松地使用PHP Curl,但我想将此负载移动到客户端,而不是在服务器X上加载。因为每个文件下载大约需要1到2秒(大小约为2–3MB及其CSV文件),每个用户可能有大约100-200个这样的文件要下载,如果大约有20个用户,这可能会使我的ServerX崩溃李>
不重要,不管怎样,你都有一个严重的问题需要解决。
我将假设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);
}
无论如何,您的服务器Y应该提供一个文件,以便在客户端下载和生成报告。您希望从服务器Y中删除哪种负载?报告生成功能?不是从服务器Y,我不想从服务器Y删除任何负载,我希望我的服务器X不应干扰下载,因为用户登录到我的服务器而不是YRafael,我已经更新了问题描述,我认为之前有点混乱。谢谢你,我不想说1-2秒,我想知道文件的大小。1-2秒?文件一定很大。如果我错了,请纠正我。您希望在服务器Y上生成一个文件(文件格式是什么?二进制?),并在不使用服务器X的情况下直接提供给客户机。客户机应解析此文件并生成报告。我说得对吗?