【问题标题】:Is it possible to drag-and-drop a local file from a file manager to a browser and get the file's uri?是否可以将本地文件从文件管理器拖放到浏览器并获取文件的 uri?
【发布时间】:2014-08-31 19:51:39
【问题描述】:

上下文:

我是 TiddlyWiki(离线非线性个人笔记本)用户,我想改进图像附加的工作流程。将图像附加到 TW 的基本方法是这样编写:

[img[image-url-either-absolute-or-relative]]

在编辑区域。问题是,如果我要附加 20 张图片,我必须提取 20 个 url 并粘贴它们(并使用 [img[...]] 包装器)。我的想法是编写一个插件,允许我将 20 个文件从文件管理器拖放到编辑区域,并获得 20 个 url(最好用基本 [img[...]] 语法或其他一些)。

这可能吗?:

获取本地文件的 url(或 uri,随便什么)不是 Web 应用程序的常见操作,出于安全原因,它似乎被禁止(至少默认情况下)。不过,有没有办法实现这一点?前提是用户将接受任何安全警告。

可能是解决方法?

如果有解决方法的可能性(可能使用 AutoHotKey 或其他),我会很高兴听到(请记住,目标是改进工作流程,因此需要最少的额外点击/按键) .


目前,我很想为 Window 7 + Opera 12.17 实现此功能,但当然,解决方案越通用越好(最后,如果有用,我会与其他人分享)。是的,目前我说的是 TW Classic,而不是 TW5。

【问题讨论】:

  • 如果拖放导致文件被复制,是否可以接受? 一个支持拖放上传的 HTML5 API,您可能会使用 TiddlyWiki 用于保存更改的相同机制,以便将更改写入 HTML 文件旁边的某种 tiddlywiki_files 文件夹。跨度>
  • 是的,在某些情况下这是更理想的行为(在某些情况下不是,但无论如何);但是 1)这是否需要创建服务器端部分? 2) 有没有办法以编程方式定义这些文件的名称,或者它们将被命名为 xJv8Kd9.jpg? 3)你还记得你在说什么API吗?我必须在拖放 API 或其他地方寻找它吗?还是谢谢。

标签: javascript drag-and-drop single-page-application tiddlywiki


【解决方案1】:

使用复制操作的方法有两个阶段:

首先,您使用 HTML5 支持 drag-and-drop upload 1 [2] 来获取文件到浏览器中。

正如我链接的页面所展示的,HTML5 File API 为您提供了文件名(没有路径)、mimetype(可能猜到了)、字节大小和内容。 (API 规范还显示了最后修改日期的字段)

然后,第二步是将文件返回到磁盘上相对于 TiddlyWiki 文件的已知位置,并在当前光标位置插入一个相对 URL。

TiddlyWiki 有一个它使用的不同保护程序后端的集合,所以你基本上想要挂钩并使用相同的 API TW Classic 用于编写备份文件和可选的 RSS 更改日志。

注意:这在 TW5 中可能还可能不可用。我记得在路线图上看到重新添加备份支持,并且从savers/tiddlyfox.js 判断,目前似乎对 TiddlyWiki 本身的路径进行了硬编码。但是,将它们保存在 Wiki 中作为二进制数据提琴手始终是一种选择。

至于不复制就做...

我有一个非常强烈的印象,即出于安全原因,不可能做到完美,但这里有一些想法:

  1. 如果您愿意手动输入路径或保证文件始终位于已知文件夹中,您可以使用File API 仅检索文件名。
  2. 您可以编写一个脚本或插件来实现此工作流程:
    1. 在资源管理器中复制文件
    2. 将光标定位到您想要 URL 的位置
    3. 按全局热键

作为多年前迁移到 Linux 的人,我会使用 Python+PyGTK+python-xlib,但 AutoHotKey 是 GPL 并且应该允许您在 Windows 上执行此操作:

  1. 可以绑定全局热键
  2. 它可以读取剪贴板
  3. 如果您无法找到或编写 Python 的 os.path.relpathurllib.pathname2url 的 AHK 克隆,您可以调用外部脚本来完成这项工作。
  4. 它可以伪造按键,允许它自动输入到您的 TiddlyWiki 的编辑窗口中。

【讨论】:

  • 谢谢哥们,我也有类似的想法,但谢谢你把这些放在一起。
  • 不幸的是,TW 保存似乎无法将二进制数据保存到磁盘:groups.google.com/forum/#!topic/tiddlywikidev/he6GqR0Sejc 我能想到的唯一方法是对创建的文件进行 base64 编码并异步读取它们。
  • 不管怎样,我迟早会试试这个东西;我实际上在考虑 5 个组件:1)拖放以获取文件内容; 2) 使用 AutoHotKey 进行一些黑客攻击以获取文件路径 [不幸的是,我对 ATK 的了解非常有限,我不知道从哪里开始]; 3)从剪贴板粘贴图像; 4)以base64形式附加图像; 5)将图像保存到外部文件(可能base64是要走的路,但我必须弄清楚它是否可以轻松加载到TW)。
  • 实际上,我有 2 个主要应用程序:将图像附加为画廊(1/2+5 是要走的路,有时引用比复制更好)和在 TW 中创建演示文稿(最需要的东西是 3+4,但其他也是可取的)。
猜你喜欢
  • 2019-10-10
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 2015-06-03
  • 2011-07-21
  • 2022-01-13
相关资源
最近更新 更多