【问题标题】:Is it possible to set the value of a file input to files from another file input?是否可以将文件输入的值设置为来自另一个文件输入的文件?
【发布时间】:2013-12-06 22:18:42
【问题描述】:

我怀疑我会对这个感到失望,但我想知道是否有任何方法可以使用从不同文件输入获得的文件来设置文件输入的值。

我的例子是一个允许多选的文件输入:

  • 用户选择了一些文件
  • 添加了另一个文件输入(使用 javascript - 这无关紧要 - 它可能已经以原始形式存在)
  • 第二个输入的值设置为第一个输入中的一个文件的值
  • 提交表单时(通常不使用 ajax),服务器从两个输入中接收文件。

我意识到人们可能会对安全方面发表评论,但我只谈论用户已经特别选择的文件(在第一个输入中)。 我不需要读取文件(我知道我可以使用 FileReader API 做到这一点),并且我不想使用 AJAX 提交表单 - 我只是想将多个选定文件从一个多个文件输入拆分为单个文件输入。

【问题讨论】:

  • “我意识到人们可能会评论安全方面,但我只谈论用户已经特别选择的文件(在第一个输入中)”——浏览器没有要知道,如果它允许您设置文件输入的值,那么它将很容易受到攻击。
  • 我不完全清楚浏览器是否知道这一点 - 大概您可以从文件列表中提取的文件对象是您无法更改的特殊对象,所以我认为您只是将受保护的对象从一个地方传递到另一个地方。除非我当然忽略了存储现实并且文件输入的值是本地文件系统中文件的路径 - 当然提交的值只是数据!
  • Rupert,想想 3rd 方脚本,比如广告,拦截和劫持你所有上传的文件......
  • 我不明白这有什么意义 - 如果任何第三方脚本(您负责在您的页面上允许)想要访问这些文件,那么他们已经可以通过查询任何文件输入并从中获取文件对象。
  • 好吧,我试图解释为什么你不能这样做可能是错的,但事实是你不能设置文件输入的值以编程方式,这是出于安全原因,无论它们是什么。我不确定您要在这里解决什么样的问题。如果是 UI 方面的,您可以从多个文件输入中获取 FileList,并将每个文件单独显示为 HTML 列表。

标签: javascript html forms


【解决方案1】:

在获取时,它必须返回字符串"C:\fakepath\",后跟 选定文件列表中第一个文件的名称(如果有),或 如果列表为空,则为空字符串。在设置时,如果新值是 空字符串,它必须清空选定文件的列表;否则,它 必须抛出 InvalidStateError 异常。

请参阅value attribute specification。所以你不能得到真正的值,也不能设置一个空字符串以外的新值。

【讨论】:

  • 这似乎是我害怕的答案! ;)
猜你喜欢
  • 2020-07-27
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-02
  • 2017-07-19
  • 2021-04-20
相关资源
最近更新 更多