如何下载并保存文件到本地,实现文件下载的脚本制作。以下是本人测试某系统总结整理的脚本,仅供参考。
#include "lrs.h" Action() { // 示例一: //第一种创建随机数的方法,此种方案是我们采用的 int flen; //定义一个整型变量保存获得文件的大小 long filedes; //保存文件句柄 char file[256]="\0"; //保存文件路径及文件名 char * strNumber; //定义一个随机数 strNumber=lr_eval_string("{RandomNum}"); 获取1~100个随机数 strcat(file,"D:\\DownLoad\\"); //将路径保存到file变量中 strcat(file,strNumber); //将获得的随机数拼接在file变量之后 strcat(file,".zip"); //将下载的文件后缀名.rar拼接在file变量之后 //第二种创建随机数的方法 int flen; //文件大小 long filedes; //响应数据内容大小 char file[256]="\0"; //保存文件路径及文件名 int rNum; //定义一个随机数 char S[8]; //数字由int转为char srand(time(NULL)); //初始化 rNum= rand() % 100; //获得0~100的随机数 sprintf(S,"%d",rNum);//int 转换为 char strcat(file,"D:\\DownLoad\\");//将d:\test路径赋值给file strcat(file,S);//在file后面加上随机数 strcat(file,".zip"); //输出的文件格式 web_set_max_html_param_len("20000");//设置参数的最大长度,注意该值必须大于文件的大小 web_reg_save_param("Download","LB=","RB=","SEARCH=BODY", LAST); lr_start_transaction("下载"); web_url("DownLoadBW","URL=http://IP:port/bsreport/download.action?fileName=/report/workdir/reportfile/20141231.txt.zip", "Resource=1", LAST ); flen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);//获取响应中的文件长度 if(flen > 0) //实际 4KB 的压缩文件 { lr_end_transaction("下载",LR_PASS); if((filedes = fopen(file, "wb")) == NULL) //以写方式打开文件 { lr_output_message("Open File Failed!"); return -1; } fwrite(lr_eval_string("{Download}"), flen, 1, filedes); //写入文件内容 fclose(filedes); //关闭文件 }else{ lr_end_transaction("下载",LR_FAIL); } /** 此种方法是把下载的文件下载到D:\\DownLoad目录下并命名为 C003_15087_01.txt.zip 测试结果证明:在并发压力下,多个进程对同一个文件做保存、打开和替换,就会出现排队等待现象, 大量占用执行机的内存资源。可能导致内存溢出。 **/ //示例二: int flen; //定义一个整型变量保存获得文件的大小 long filedes; //保存文件句柄 char * file = "D:\\DownLoad\\C003_15087_01.txt.zip"; //保存文件路径及文件名 web_set_max_html_param_len("60000");//设置参数的最大长度,注意该值必须大于文件的大小 web_reg_save_param("Download","LB=","RB=","SEARCH=BODY", LAST); lr_start_transaction("产品下载"); web_url("DownLoadBW", "URL=http://IP:port/bsreport/download.action?fileName=/report/workdir/reportfile/20141231.txt.zip", "Resource=1", LAST ); flen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);//获取响应中的文件长度 /***下面的方式是如果获取到的文件大小大于0,则判断交易成功,然后再去写文件,否则直接判断交易失败。 if(flen > 0) //实际 4KB 的压缩文件 { lr_end_transaction("下载",LR_PASS); if((filedes = fopen(file, "wb")) == NULL) //以写方式打开文件 { lr_output_message("Open File Failed!"); return -1; } fwrite(lr_eval_string("{Download}"), flen, 1, filedes); //写入文件内容 fclose(filedes); //关闭文件 }else{ lr_end_transaction("下载",LR_FAIL); } ***/ /***下面的方式是如果写文件成功就判断交易成功,否则交易失败 if(flen > 0) { if((filedes = fopen(file, "wb")) == NULL) { lr_output_message("Open File Failed!"); lr_end_transaction("下载",LR_FAIL); return -1; } fwrite(lr_eval_string("{Download}"), flen, 1, filedes);//写入文件内容 fclose(filedes); //关闭文件 lr_end_transaction("下载",LR_PASS); } ***/ /** 此种方法是只从服务器上获取下载的文件资源路径即可,不把资源下载到本地。 测试结果证明:在并发压力下,大量占用执行机的内存资源。压力达到一定程度会导致内存溢出。 **/ //示例三: long flen; web_set_max_html_param_len("50000");//设置参数的最大长度,注意该值必须大于文件的大小 web_reg_save_param("Download","LB=","RB=","SEARCH=BODY", LAST); lr_start_transaction("下载"); web_url("DownLoadBW", "URL=http://IP:port/bsreport/download.action?fileName=/report/workdir/reportfile/20141231.txt.zip", "Resource=1", LAST ); flen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);//获取响应中的文件长度 if(flen > 0) //实际 4KB 的压缩文件 { lr_end_transaction("下载",LR_PASS); }else{ lr_end_transaction("下载",LR_FAIL); } return 0; }