注册 登录
编程论坛 VFP论坛

vfp调用IE后,IE会自动弹出文件后,怎样保存此文件到指定的位置

xqmxqm01 发布于 2020-10-10 16:42, 2374 次点击
现在有一个问题,vfp调用IE访问一个指定的接口(比如连接的调用的接口是webapi,文件格式是json),返回的是一个文件,怎样在ie界面隐藏后把这个文件自动保存在指定的文件位置,这样可以方便去读取这个文件的数据?
12 回复
#2
吹水佬2020-10-10 16:59
具体情况不清楚
有无示例代码参考下
#3
xqmxqm012020-10-10 17:01
使用webbrowser控件,如何在下载时不弹出“另存为”,而是能让程序设置到指定的位置保存
#4
吹水佬2020-10-10 17:57
回复 3楼 xqmxqm01
在页面找下载连接,自己写下载代码
#5
xqmxqm012020-10-12 08:37
回复 4楼 吹水佬
请问能否给个例子参考下,劳驾了
#6
吹水佬2020-10-12 09:38
以下是引用xqmxqm01在2020-10-12 08:37:11的发言:

请问能否给个例子参考下,劳驾了

参考2楼
#7
xqmxqm012020-10-12 10:31
比如我在表单上使用一个webbrowser控件,然后用:Thisform.webbrowser1.Navigate("http://xxx/GetBarcodeData?pdnum=PD06210195"),出现文件下载对话框,提示保存文件对话框,对话框里面显示文件名为:GetBarcodeData.json;(虽然可以设置让IE自动保存的路径,但是要点击保存按钮),现在想做到不提示这个对话框,自动保存到d:\temp\PD06210195.json,这样就可以去读取这个文件的数据,不会改脚本,请赐教
#8
吹水佬2020-10-12 10:58
回复 7楼 xqmxqm01
没搞头,试不了
#9
xqmxqm012020-10-13 10:06
请问有没有解决方案
#10
吹水佬2020-10-13 13:59
以下是引用xqmxqm01在2020-10-13 10:06:06的发言:

请问有没有解决方案

要动手才知道的吧,我怎样下手?
#11
xqmxqm012020-10-13 15:19
因10年前就转型管理岗,此次因特殊原因,需要自己动手写个小助手,不过这个问题想办法解决了,现在我把思路分享给大家:
1. 用delphi去写个带参数的传入型号,然后利用delphi去下载下来,因返回的json文件,文件名也可以跟着参数去设定,这样下载下来后就不会混淆。
2. 如果下载成功,delphi返回值给vfp
3. vfp根据返回的成功值,用VFP写个函数解json文件,转换成想要的数据到grid1里面。

delphi最初的测试源码如下(文件名变量需要去设置),注意要用URLMon和ShellApi(uses  URLMon, ShellApi):

function DownloadFile(SourceFile, DestFile: string): Boolean;
begin
try
Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0;
except
Result := False;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
SourceFile:string;
DestFile:string;
begin
   SourceFile:='http://xxxx/Receive/GetBarcodeData?pdnum=PD06210195';
   DestFile:= 'd:\xx\temp\indata\pd06210195.json';
  if DownloadFile(SourceFile, DestFile) then
  begin
    ShowMessage('Download succesful!');
ShellExecute(Application.Handle,PChar('open'),PChar(DestFile),PChar(''),nil,SW_NORMAL)
  end
  else
  ShowMessage('Error while downloading' + SourceFile)
end;
#12
xqmxqm012020-10-13 15:41
因10年前转管理岗,最近因工作需要,需要做个小助手。碰到这个难题,不过想了一个笨方法去解决这个问题,vfp传递需要调用webapi接口的料号给delphi,delphi再用这参数去设置文件名,下载到指定位置,如果下载成功,返回参数给vfp,vfp收到成功下载的返回值后,写个函数去解读接收到的json文件,显示在grid1里面,虽然有点烦杂,不过最终结果是解决了下载问题

测试的delphi的最初源码如下(测试用就没有设置参数,另注意需要使用URLMon和ShellApi,uses  URLMon, ShellApi):

function DownloadFile(SourceFile, DestFile: string): Boolean;
begin
try
Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0;
except
Result := False;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
SourceFile:string;
DestFile:string;
begin
   SourceFile:='http://xxxx/Receive/GetBarcodeData?pdnum=PD06210195';
   DestFile:= 'd:\xx\temp\indata\pd06210195.json';
  if DownloadFile(SourceFile, DestFile) then
  begin
    ShowMessage('下载成功');
ShellExecute(Application.Handle,PChar('open'),PChar(DestFile),PChar(''),nil,SW_NORMAL)
  end
  else
  ShowMessage('下载出错:' + SourceFile)
end;



#13
chinesetank2020-10-27 09:47
感觉二楼的办法挺靠谱的
1