Javascript 创建自己版本的输入[类型=文件]

Javascript 创建自己版本的输入[类型=文件],javascript,ajax,forms,html,Javascript,Ajax,Forms,Html,我有一个有趣的问题,我正试图解决,不知道你们是否能帮我一把 我正在构建一个小工具,允许用户将文件拖放到我们的CMS中。虽然我已经知道拖放部分工作正常(使用新的HTML5API),但我仍然无法理解文件上传应该如何工作,特别是因为我的限制是我无法修改服务器的任何功能。我看过了所有其他的例子,它们都有相对简单的用例,它们只发送文件数据,而不必将所有内容转换为多部分/表单数据,等等 目前,服务器有一个简单的表单,看起来有点像这样: Name: [ input=text ] File: [ input=f

我有一个有趣的问题,我正试图解决,不知道你们是否能帮我一把

我正在构建一个小工具,允许用户将文件拖放到我们的CMS中。虽然我已经知道拖放部分工作正常(使用新的HTML5API),但我仍然无法理解文件上传应该如何工作,特别是因为我的限制是我无法修改服务器的任何功能。我看过了所有其他的例子,它们都有相对简单的用例,它们只发送文件数据,而不必将所有内容转换为多部分/表单数据,等等

目前,服务器有一个简单的表单,看起来有点像这样:

Name: [ input=text ]
File: [ input=file ]
Caption: [ textarea ]
Content-Disposition: form-data; name="image_0"; filename="assets.jpg" 

Content-Type: image/jpeg

<Some binary image data here>
当用户点击“保存”按钮时,将发出内容类型多部分/表单数据的POST调用

最初我想我可以用自己的隐藏控件(使用相同的“name”属性)替换当前的输入控件,并将base64编码的数据作为“值”,但是CMS希望传递一个“filename”,通常由input=文件负责。例如,最后一篇文章看起来有点像这样:

Name: [ input=text ]
File: [ input=file ]
Caption: [ textarea ]
Content-Disposition: form-data; name="image_0"; filename="assets.jpg" 

Content-Type: image/jpeg

<Some binary image data here>
内容配置:表单数据;name=“image_0”;filename=“assets.jpg”
内容类型:图像/jpeg
我是不是走错了路?我应该只使用XHR对象吗


干杯

我可能弄错了,但我相信没有办法上传文件。您可以选择Flash或Java之类的插件,也可以选择基于框架的时髦解决方案,上传在单独的框架中进行。我认为您在那里找到的任何“AJAX”文件上载控件都会使用这些方法之一

显然,最简单的方法就是将整个表单发布到服务器上,但这对我来说太简单了。

我解决了这个问题

以下是我所做的和我的推荐信:

我必须使用FormData对象(在Firefox4+、Safari 5+和Google Chrome中提供),当然还有FileReader对象

以下是实现(使用jQuery):


目前IE不是问题,但很快就会成为问题(因为我需要将此扩展移植到IE)。有没有更好的方法来解决IE的问题?

我刚刚想好了!请看上面我的回答(当你发布一些东西,然后马上解决它时,你难道不讨厌吗):\n经过再三考虑,我必须等8个小时才能回答我自己的问题xu xI我很想看看你的解决方案-你会发布它吗?嘿,乔,对不起,我离开了一会儿。我已经发布了我的答案。据我所读,新的文件API(直到几天前我才意识到)在IE9中不可用,但应该在IE10中。总是有基于iframe的上传让你无法接受——我不是这个想法的忠实粉丝,但它确实有效。