背景:测试中,有一个模块涉及上传和下载文件。
步骤:这里直接上脚本:
*** 上传文件 ***
web_submit_data("upLoadFile",
"Action=https://{domain}:10001/v1/worksheet/upLoadFile/",
"Method=POST",
"EncType=multipart/form-data", // 文件的传输格式。一般接口文档中会有。没有的话也可以抓包查看
"TargetFrame=",
"RecContentType=application/json",
"Referer=https://{domain}:10001/console/",
"Snapshot=t9.inf",
"Mode=HTML",
ITEMDATA,
"Name=file", "Value=C:\\upload\\test.png", "File=Yes", ENDITEM, // 录制时这里只有文件名,但需要添加上传文件的绝对路径,否则回放时会报找不到文件的错误
"Name=description", "Value=", ENDITEM,
"Name=id", "Value={sheetId}", ENDITEM, // 这里是关联的前面表单单号
LAST);
*** 下载文件 ***
int flen; // 文件长度
long filedes; // 文件内容
char filepath[100] = "C:\\downloads\\test_"; // 文件存放路径和文件名
...... // 省略部分为其他操作
web_set_max_html_param_len("400000"); // 注意该值必须大于文件大小。实际上,这里就瞎蒙了一个值。
web_reg_save_param("fcontent", // 获取响应的全部内容,作为文件保存内容
"LB=", // 这里不用写左右边界
"RB=",
"SEARCH=BODY",
LAST);
strcat(filepath, lr_eval_string("{nums}")); // 这里是拼接一个随机的文件名。随机数的产生见下文。
strcat(filepath, ".png"); // 拼接后缀
flen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE); //获取响应中的文件长度
if(flen > 0)
{
if((filedes=fopen(filepath,"wb")) == NULL) // 以写的方式打开文件。这个文件就是要保存的目标文件
{
lr_output_message("文件操作失败");
return -1;
}else{
fwrite(lr_eval_string("{fconent}"),flen,1,fileds); //写入文件内容
fclose(fileds);//关闭文件
}
}
return 0;
PS:
1. 生成随机数的方法,除了使用rand()外,还可以这样用:参数列表中,新建一个参数名称,在Parameter type中选择“Random Number”
2. 在下载文件并保存到本地时,耗费了较长时间。因为没把脚本理解到。fopen(filepath, "wb");这里filepath就是想要保存的文件路径和文件名。
网上的参考资料:
https://www.cnblogs.com/yezhaohui/archive/2013/07/28/3221440.html
https://www.cnblogs.com/guanhe/archive/2006/06/27/436746.aspx