使用php通过ajax上传文件

时间:2009-04-07 14:01:12

标签: php javascript ajax

我想知道是否可以通过ajax和php上传二进制文件,并有一个下载它的链接。我想避免刷新整个页面,就像使用标准的html表单一样。到目前为止,我一直在使用表单来获取信息,例如收音机和文本框,并使用javascript来覆盖默认行为。上传文件是否类似?

8 个答案:

答案 0 :(得分:13)

无法通过Javascript提交文件。

您的选择是:

  • 隐藏的iframe技巧,由Google推广。自己实现这个可能会产生一些笨重的东西,所以有一些库,例如jQuery,它们有插件,比如jQuery的流行Form Plugin,它可以自动执行此操作,因此您不必感到肮脏在使用它时。
  • 使用Flash来促进流程。最值得注意的是SWFUpload非常受欢迎。在所有条件相同的情况下,我可能会使用Javascript解决方案,但过去我已经成功使用了它。这个解决方案很酷的是它带有一个更好的界面,如加载指示器和缩略图等。但是,此时,您要求用户使用Flash + Javascript,这在某些情况下可能无效。
  • 使用Silverlight代替Flash,虽然我不认为这是一个可行的解决方案,因为它的渗透率远低于其他两个解决方案。

答案 1 :(得分:1)

虽然您无法通过AJAX上传文件,但您可以在弹出窗口中放置文件控件,然后在关闭时更新弹出弹出窗口的页面。

我不太清楚如何更新产生弹出窗口的页面,但我已经在ANGEL学习管理套件中看到了它。

答案 2 :(得分:1)

在表单上有一个IFrame(display:none),并将表单的目标设置为iframe。

我的表单如下:

<iframe id="upload_target" name="upload_target" src="" style="width:0px;height:0px;border:0px solid #fff;"></iframe>
<form enctype="multipart/form-data" name="frmXMLUpload"  target="upload_target" action="scripts/uploadXML.php" method="POST" onSubmit="return checkExtension(fXMLFile.value, 'xml')">
<!--only allow up to 30k of data to be uploaded-->
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
<input name="fXMLFile" id="fXMLFile" type="file" accept="text/xml" size="50" />
<p><input type="submit" value="Upload" /></p>
</form>

处理你在IFRAME中的回应。基本上这不是AJAX,但谁希望JavaScript能够访问本地计算机上的文件?它的方式很好。

答案 3 :(得分:0)

通常不可能仅在AJAX / Javascript中执行此操作。

看看:

http://www.codeplex.com/SLFileUpload/

了解在silverlight应用程序中执行此操作的方法。

或:

http://www.element-it.com/Examples/MultiPowUpload/SimpleUpload.html

在闪光灯中。

答案 4 :(得分:0)

正如John Gietzen所说,你不能直接通过AJAX(通过AJAX发送实际数据)来做到这一点。你可以做什么,将你的表单提交给一个不可见的iframe,然后使用AJAX向服务器询问URL。这将保留基本的用户体验 - 不刷新页面。

答案 5 :(得分:0)

你考虑过jquery吗?有很好的插件可以很好地完成这项任务。

例如:http://www.phpletter.com/Our-Projects/AjaxFileUpload/

答案 6 :(得分:0)

看看这个例子,我的插件比phpLetter的插件好一点,虽然phpLetter可能有更好的PHP方面的例子。

http://www.fyneworks.com/jquery/multiple-file-upload/#tab-Examples

答案 7 :(得分:0)

您可能还想查看SwfUploader,它使用Flash执行文件上传,显示进度条,无需刷新页面。可以看到示范here