【发布时间】:2010-10-18 01:47:17
【问题描述】:
我想知道是否可以通过 ajax 和 php 上传二进制文件,并有一个下载链接。我想避免刷新整个页面,就像使用标准 html 表单一样。到目前为止,我一直在使用表单来获取信息,例如单选框和文本框,并使用 javascript 来覆盖默认行为。上传文件是否可以做类似的事情?
【问题讨论】:
标签: php javascript ajax
我想知道是否可以通过 ajax 和 php 上传二进制文件,并有一个下载链接。我想避免刷新整个页面,就像使用标准 html 表单一样。到目前为止,我一直在使用表单来获取信息,例如单选框和文本框,并使用 javascript 来覆盖默认行为。上传文件是否可以做类似的事情?
【问题讨论】:
标签: php javascript ajax
您可能还想看看 SwfUploader ,它使用 Flash 上传文件,显示进度条,并且无需刷新页面。演示可见here。
【讨论】:
无法通过 Javascript 提交文件。
您的选择是:
【讨论】:
看看这个例子,我的插件比 phpLetter 的插件好一点,尽管 phpLetter 可能有更好的 PHP 方面的例子。
http://www.fyneworks.com/jquery/multiple-file-upload/#tab-Examples
【讨论】:
你考虑过 jquery 吗?有很好的插件可以优雅地做到这一点。
【讨论】:
在表单上有一个 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 能够访问您本地计算机上的文件?就这样就好了。
【讨论】:
虽然您无法通过 AJAX 上传文件,但您可以将文件控件放在弹出窗口中,然后在弹出窗口关闭时更新生成该弹出窗口的页面。
我不太清楚如何更新产生弹出窗口的页面,但我已经在 ANGEL Learning Management Suite 中看到过。
【讨论】:
opener 指的是打开弹出窗口的窗口。
正如 John Gietzen 所说,您不能直接通过 AJAX 执行此操作(ie 通过 AJAX 发送实际数据)。但是,您可以做的是,将您的表单发布到一个不可见的 iframe,然后使用 AJAX 向服务器询问 URL。这将保留基本的用户体验 - 不刷新页面。
【讨论】:
通常不可能单独在 AJAX / Javascript 中执行此操作。
看看:
http://www.codeplex.com/SLFileUpload/
在 silverlight 应用程序中执行此操作的方法。
或:
http://www.element-it.com/Examples/MultiPowUpload/SimpleUpload.html
闪现。
【讨论】: