使用php通过ajax上传文件

使用php通过ajax上传文件,php,javascript,ajax,Php,Javascript,Ajax,我想知道是否可以通过ajax和php上传二进制文件,并提供下载链接。我希望避免像使用标准html表单那样刷新整个页面。到目前为止,我一直在使用表单获取信息,比如收音机和文本框,并使用javascript覆盖默认行为。上传一个文件也可以做类似的事情吗?通常单独在AJAX/Javascript中是不可能做到这一点的 看看: 了解在silverlight应用程序中执行此操作的方法 或: 在flash中。正如John Gietzen所说,您不能直接通过AJAX实现这一点(即通过AJAX发送实际数据)

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

通常单独在AJAX/Javascript中是不可能做到这一点的

看看:

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

或:


在flash中。

正如John Gietzen所说,您不能直接通过AJAX实现这一点(即通过AJAX发送实际数据)。但是,您可以做的是,将表单发布到一个不可见的iframe,然后使用AJAX向服务器请求URL。这将保留基本的用户体验—不刷新页面。

虽然不能通过AJAX上传文件,但可以在弹出窗口中放置文件控件,然后在关闭时更新生成弹出窗口的页面

我不太清楚如何更新生成弹出窗口的页面,但我在ANGEL Learning Management Suite中看到过这样做。

在表单上有一个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>


并在YOUR IFRAME中处理响应。基本上这根本不是AJAX,但是谁希望JavaScript能够访问本地计算机上的文件呢?这样很好。

您考虑过jquery吗?有很好的插件可以优雅地完成这项工作


例如,像这样:

不可能通过Javascript提交文件

你的选择是:

  • 隐藏的iframe技巧,由谷歌推广。自己实现这一点可能会导致一些糟糕的东西,因此有一些库,比如,有插件的库,比如jQuery的流行插件,它们可以自动实现这一点,这样在使用它时,你就不必在里面感到脏兮兮的了
  • 使用Flash简化该过程。最值得注意的是,它非常受欢迎。在所有条件相同的情况下,我可能会使用Javascript解决方案来解决这个问题,但我在过去成功地使用了它。这个解决方案最酷的地方在于它有一个更好的界面,比如加载指示器和缩略图等等。但此时,您要求用户提供Flash+Javascript,这在某些情况下可能不起作用
  • 使用Silverlight代替Flash,虽然我不认为这是一个可行的解决方案,因为它比其他两个解决方案的渗透率要低得多。

看看这个例子,我觉得这个插件比phpLetter的要好一点,尽管phpLetter可能有更好的PHP方面的例子


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

据我记忆所及,
opener
指的是打开弹出窗口的窗口。