背景:测试中,有一个模块涉及上传和下载文件。
步骤:这里直接上脚本:
*** 上传文件 ***
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就是想要保存的文件路径和文件名。
3.对上传文件做一点补充:在上文中的上传文件,请求体是form-data的格式。但如若遇到要传递的是json格式,应该如何处理呢。还是直接代码:
web_submit_data("uploadFile",
"Action=http://192.168.0.5/api/uploadFile",
"Method=POST",
"EncType=multipart/form-data",
"TargetFrame=",
"RecContentType=application/json",
"Snapshot=t3.inf",
"Mode=HTML",
ITEMDATA,
"Name=content", // 这里是文件上传时一起发送的参数的key
"Value={\"name\":\"myTestFile\", \"type\": \"text\", \"minLength\": 1, \"maxLength\": 100, \"description\":\"\"}", // 这里是文件上传时一起发送的参数的value
ENDITEM,
"Name=file",
"Value=C:/Users/admin/Desktop/myFile.txt", // 这里是文件绝对路径
"File=yes",
"ContentType=application/octet-stream", // 这里是文件上传时的格式
ENDITEM,
LAST);
4. 编写脚本过程中,遇到如下报错:
Action.c(13): Error -27216: Invalid argument (number 2) [MsgId: MERR-27216]
这里的意思是,在函数web_submit_data()这里的第二个参数有误。原来是自己把原本的“Action=”,写成了“URL=”。
网上的参考资料:
https://www.cnblogs.com/yezhaohui/archive/2013/07/28/3221440.html
https://www.cnblogs.com/guanhe/archive/2006/06/27/436746.aspx