我最近一直在摆弄WebGL,并且让Collada读者工作了.问题是它很慢(Collada是一种非常冗长的格式),所以我将开始将文件转换为更易于使用的格式(可能是JSON).事实是,我已经有了用Javascript解析文件的代码,所以我也可以将它用作我的导出器!问题在于节省.
现在,我知道我可以解析文件,将结果发送到服务器,并让浏览器从服务器请求文件作为下载.但实际上服务器与这个特定的进程没有任何关系,为什么要让它参与其中呢?我已经在内存中拥有所需文件的内容.有什么方法可以使用纯javascript向用户提供下载吗?(我怀疑它,但不妨问......)
并且要明确:我没有在用户不知情的情况下尝试访问文件系统!用户将提供一个文件(可能通过拖放),脚本将转换内存中的文件,并提示用户下载结果.就浏览器而言,所有这些都应该是"安全"的活动.
[编辑]:我没有提及它,所以回答"Flash"的海报是有效的,但我正在做的部分是尝试强调纯HTML5可以做什么...所以Flash是在我的情况下.(虽然对于任何正在使用"真实"网络应用程序的人来说,这是一个非常有效的答案.)在这种情况下,除非我想要涉及服务器,否则看起来我运气不好.不管怎么说,还是要谢谢你!
我正在使用纯Javascript编写文本编辑器.我希望这样当用户点击"保存"按钮时,编辑器会下载该文件.我已经部分工作了:
uriContent = "data:application/octet-stream," + encodeURIComponent(codeMirror.getValue());
newWindow=window.open(uriContent, 'filename.txt');
该文件下载,但问题是该文件名为"download".
问题:如何将文件名更改为我想要的任何内容,例如filename.txt?
const opts = {
      suggestedName: 'data',
      types: [
        {
          description: 'NewCSV',
          accept: { 'text/csv': ['.csv'] },
        },
      ],
    };
    const handle = await (window).showSaveFilePicker(opts);
现在我有类型错误Property 'showSaveFilePicker' does not exit on type 'Window & typeof globalThis',提供 type as any解决了类型错误的问题。
const handle = await (<any>window).showSaveFilePicker(opts);
但它仍然会显示 eslint 错误Unsafe call of an anytyped value。所以我知道的唯一解决方案是禁用该文件的 eslint。有没有其他方法可以避免类型错误和 eslint 错误?
当您有视频的直接链接时,通常可以右键单击,然后会出现鼠标菜单。一旦到了那里你就会看到Save Video As。如果您点击它,它将把视频下载到您的计算机上。
我想要相同的功能,但我想在 HTML 页面上创建一个按钮,当您单击该按钮时,它会执行与上面提到的完全相同的操作。
我怎样才能做到这一点?
让我们看这个例子:我有这个链接:https://invidious.fdn.fr/latest_version ?id=NF_69Dyle1Y&raw&itag=22
这是一个用于将视频保存在本地存储中的对话框。
现在我的问题是我想通过单击 html 按钮来完成这一切。我希望打开保存对话框,而不必继续播放视频并右键单击等。有没有办法做到这一点?
html a 标签的下载属性不起作用。我尝试过像这样使用 URI
<a href='"data:application/octet-stream,"+encodeURIComponent(`https://invidious.fdn.fr/latest_version?id=NF_69Dyle1Y&raw&itag=22`)' download="video.mp4">download video</a>
但它也不起作用。
在我的 excel-export.html 中,我有:
\n\n<div class="config-menu-container first">\n\n            <div class="menu-title">\n        <span class="excel import">Excel import</span>\n                <span class="excel export">Excel Export</span>\n            </div>\n\n            <ul class="menu-body step2" id="exportable">\n                <li class="title">\n                    <span class="label main order first\xe2\x80\x9d>1</span>\n                    <span class="label main order second\xe2\x80\x9d>2</span>\n                    <span class="label main order third\xe2\x80\x9d>3</span>\n                </li>\n                <li class="row" ng-repeat="device in devices">\n                    <span class="label sub first" ng-bind="device.deviceId" ng-click="deviceScope = device.id"></span>\n                    <span class="input second">\n                        <custom-input type="text" width="330" height="24" model="device.name"></custom-input>\n                    </span>\n                    <span class="input third" ng-repeat-end>\n                        <custom-input type="select2" width="462" height="24" label=\xe2\x80\x9cSelect Device."\n                                      options="option.billingInfo" model="device.billingTargetId"></custom-input>\n                    </span>\n                </li>\n            </ul>\n</div>\n在我的 excel-export.directive.js …
下面的代码将文件保存到用户的磁盘上:
function handleSaveImg(event){
  const image = canvas.toDataURL();
  const saveImg = document.createElement('a');
  saveImg.href = image;
  saveImg.download= saveAs;
  saveImg.click();
}
if(saveMode){
  saveMode.addEventListener("click", handleSaveImg);
}
它使用<a>标签来保存一些数据(在我的例子中,是从 a 导出的图像<canvas>)。
但这会直接保存到磁盘,不会提示询问将文件保存在哪里,也不会询问以哪个名称保存。
我想强制显示“另存为”对话框,以便用户必须选择保存该文件的位置。
有什么办法吗?