2012-08-23 35 views
2

HTML使用表格将数据发送到Web服务器。这些数据可以包含在url参数中或嵌入在HTML Request体中。但对于一个文件,我不知道它是如何工作的。我想知道这一点,因为我发现上传Web和桌面应用程序文件的一些区别。HTML文件上传如何工作?

桌面应用程序通常会提供一个文本框,以允许用户输入文件的区域设置路径。但对于Web应用程序,文本框通常是只读的。当按下按钮选择文件时,它将显示文件路径。这只是桌面和网页之间的设计问题吗?

回答

3

问题有点不清楚,但有关Web应用程序(或HTML表单)的一个重要方面是它们被沙盒化,无法直接访问本地文件。所以文件上传选择器不允许直接输入文件名(可能是脚本),但只能通过操作系统(或浏览器)提供的文件选择UI(应用程序或页面不能混淆)。

一旦用户选择了文件,页面就可以访问它,但它不能自己(或暗中)进行选择。

最近的趋势是以相同的方式锁定桌面应用程序。例如,请参阅Apple的沙盒限制,也不允许应用程序在没有用户干预的情况下打开随机文件。

+1

谢谢@Thilo。这对我来说听起来很合理.JavaScript在HTML5之前不能访问本地文件,但输入文件名只是一个'String'。为什么它不能被JavaScript操纵?我也很困惑,“一旦用户选择了文件,页面就可以访问它”。这是什么意思?选择后页面是否可以操纵文件? – wqfeng

+2

JavaScript *可以*访问本地文件(至少从HTML5开始),但只有用户明确选择的文件。我想说的是,应用程序无法直接访问它想要的磁盘上的任何文件(而对于其他表单字段,它可以在将它发送到服务器之前以任何方式覆盖用户的输入)。 – Thilo

0

这只是桌面和网页之间的设计问题吗?

文件上传表单的实现,无论是桌面还是网页,对于最终结果来说都很不重要。桌面应用程序和网络控件都可以使用路径字符串或完整的文件导航器,但桌面应用程序在实现中可能会有所不同。唯一的区别是目的地:桌面应用倾向于解析内存中的文件并以某种方式呈现它,而Web应用几乎总是将其上传到服务器(尽管这可能会发生变化:请参阅HTML5 file API),然后进一步操作它。

+0

我不认为一个Web应用程序可以使用任意的路径字符串。所有文件选择必须由用户“审查”。 – Thilo

+0

@Thilo Lynx让我做得很好。 –

+0

Lynx让*你*输入文件路径。它不会让页面上的Javascript(如果它支持),更改该路径或提供它自己的。 – Thilo