【问题标题】:How does FormData() knows the path in OS of the file that is submitted in the form?FormData() 如何知道表单中提交的文件在操作系统中的路径?
【发布时间】:2025-12-14 09:25:01
【问题描述】:

这是传递给 FormData() 的 File 对象的转储。没有路径信息。此文件在我的桌面上,而不是在运行此 javascript 的项目文件夹中。

我正在使用以下代码提交表单。那么程序如何知道我在表单中发送的文件的路径呢? 当我使用 FileReader 而不是表单来获取用户提交的操作系统文件时,同样的情况也让我感到困惑。 File 对象中只有文件名。

我的问题是路径信息在哪里?

var formData = new FormData();

formData.append("username", "Groucho");
formData.append("accountnum", 123456); // number 123456 is immediately converted to string "123456"

// HTML file input user's choice...
formData.append("userfile", fileInputElement.files[0]);

【问题讨论】:

    标签: javascript multipartform-data form-data


    【解决方案1】:

    fileInputElement.files[0] 表示 input type="file" 元素的输入。

    浏览器是您在实际文件和服务器/客户端之间的中介。它从磁盘读取字节并将其传递给 Steam。

    【讨论】:

    • 能不能说浏览器知道文件的本地路径,javascript从浏览器询问内容,然后将内容提交给服务器?但是浏览器没有提供显示路径信息的api?
    • 你完全正确。您不希望服务器或 JavaScript 知道本地路径。这对他们来说无关紧要,可能会导致安全问题。
    【解决方案2】:

    FormData() 不知道文件的路径,也不需要。此功能用于将文件上传到 Web 服务器,而 Web 服务器无权访问用户的文件系统。从 web 服务器的角度来看,文件只是一个字节串,文件名只是对文件应该被调用的内容的引用。

    【讨论】:

      【解决方案3】:

      信息存储在文件对象中,但不会通过 API 暴露给 JavaScript。

      浏览器需要知道文件在哪里上传或通过 FileReader 接口提供对数据的访问,但 JavaScript 不需要(因为它可以在需要时询问文件的内容)。

      【讨论】:

      • 昆汀,你怎么知道的?可以给我一些参考吗?