【问题标题】:uploading a file via ajax with php使用php通过ajax上传文件
【发布时间】:2010-10-18 01:47:17
【问题描述】:

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

【问题讨论】:

    标签: php javascript ajax


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      无法通过 Javascript 提交文件。

      您的选择是:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          你考虑过 jquery 吗?有很好的插件可以优雅地做到这一点。

          比如这个:http://www.phpletter.com/Our-Projects/AjaxFileUpload/

          【讨论】:

            【解决方案5】:

            在表单上有一个 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 能够访问您本地计算机上的文件?就这样就好了。

            【讨论】:

              【解决方案6】:

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

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

              【讨论】:

              • 据我所知,opener 指的是打开弹出窗口的窗口。
              【解决方案7】:

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

              【讨论】:

                【解决方案8】:

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

                看看:

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

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

                或:

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

                闪现。

                【讨论】:

                  猜你喜欢
                  • 2021-01-17
                  • 2012-10-29
                  • 1970-01-01
                  • 2010-11-12
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-07-07
                  相关资源
                  最近更新 更多