a标签下载文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了a标签下载文件相关的知识,希望对你有一定的参考价值。

本来想慢慢写总结的,结果今天来了新项目,又要忙了。

随便写点记录下好了,有个大概印象,将来也好知道去哪儿找。

 

标题没想好就随手写了,其实是这样的,这个项目需要连接azure虚拟机,就是ms的那个。

然后虚拟机不是可以远程连接么,你在azure上操作的时候就是点击了链接虚拟机按钮,然后会让你下载一个rdp文件,打开这个文件输入你用户名的帐号密码就能连了。

其实这个rdp文件就是个txt,里面就两行,长这样。

full address:s:××××.×××××:××××
prompt for credentials:i:1

第一段×××是云服务名,第二段域名,第三段端口。

(项目里实际做过之后才知道,azure建立虚拟机,首先要建云服务,然后是存储空间,网络,最后是虚拟机,这段当然。。。不是我写的,我想想要不要写下)

 

废话太多,继续说下载这个文件的事。

1.首先后台要生成这个文件的内容

VirtualMachineGetRemoteDesktopFileResponse remoteFile=ComputeManagementClient.VirtualMachines.GetRemoteDesktopFile(serviceName, serviceName, vmName);   这段直接抄必然是错的233333,我省了实例化。还有这个第二个参数是deployment名,就是部署名,我这里是和服务名一样的。

byte[] file = remoteFile.RemoteDesktopFile;

return File(new MemoryStream(file), "text/plain",vmName+ ".rdp");

这样后台就把文件内容返回了。

 

2.前台,也就是我被坑到的地方,主要还是ie的保护机制。

var blob = new Blob([data], {type: "text/plain"});
                    var fileName = vm.VMName+‘.rdp‘;
                    var a = document.createElement("a");
                    document.body.appendChild(a);
                    a.download = fileName;
                    a.href = URL.createObjectURL(blob);
                    try {
                        a.click();
                    } catch (e) {
                        navigator.msSaveBlob(blob, fileName);
                    }

那个data就是后台返回的东西,最开始我是只写了a.clcik,然后过了几天- -发现ie下用不了,然后才注意到,ie禁止做这种模拟点击啊之类的操作。

于是搜了一些方法,试到msSaveBlob的时候发现可以,于是就用了这个,当然我只是了ff,chrome,和ie11,别的再出问题再说。

写完收工。

以上是关于a标签下载文件的主要内容,如果未能解决你的问题,请参考以下文章

如何通过代码设置片段标签?

用<a>标签作本地文件的超链接为何别的机子下载不了?

VSCode自定义代码片段——.vue文件的模板

几条jQuery代码片段助力Web开发效率提升

html下载文件代码,就是点击按钮下载指定文件?

Android中切换标签片段之间的延迟