【问题标题】:File upload functionality in google closure?谷歌关闭中的文件上传功能?
【发布时间】:2012-05-28 21:32:48
【问题描述】:

我正在谷歌应用引擎上创建一个项目。在这里,我正在尝试将文件上传到 blobstore。 我有一个包含多个表单的 html 文件,其中每个表单都有一个文件上传按钮

<input type="file">

现在,只要用户使用此按钮选择文件,该文件就必须开始上传到 GAE blobstore。
我有可以执行此上传内容的 python 代码,但是 我无法将我的后端 (python) 代码链接到我浏览过的文件。 此外,由于有多种表单,因此页面不得刷新。

我在谷歌关闭中找到了页面刷新的解决方案(使用弹出窗口),但在我的项目中并不需要。我相信闭包库中没有其他方法。

我正在尝试使用 ajax 调用来做到这一点,但我对 ajax 的了解非常有限,这使我无法获得所需的结果。

使用 JQUERY 不是一种选择。

我希望我的问题很清楚,如果没有,请回复。

非常感谢任何帮助。

谢谢

【问题讨论】:

    标签: python html ajax google-app-engine google-closure


    【解决方案1】:

    Google Closure 提供了一个 IframeIo 类,可以发布您的文件(无需刷新页面),此处提供文档,http://closure-library.googlecode.com/svn/docs/class_goog_net_IframeIo.html

    我们在 IframeIo(在 BSD 许可下可用)上实现了一个包装器,以在用户选择文件时向用户显示文件上传输入和 URL 帖子。来源:https://code.google.com/p/prestans/source/browse/trunk/client/closure/ui/IframeFileUpload.js

    处理成功/失败代码有点棘手,具体取决于您从 Blobstore 文件上传处理程序返回的内容。

    【讨论】:

    【解决方案2】:

    我使用的是输入/文件控制的onchange。 onChange 返回控件和 mime 类型。在 onchange 中,您可以访问控件的 filelist 数组以获取文件名。 使用文件名,您可以使用 FileReader 加载实际数据。可以使用 xhr post(并将其转换为 base64)将此数据上传到服务器。比如:

    function onChange(control, mimetype) {
    var f = control.files;
    if (f.length) {
      var reader = new FileReader;
      reader.onload = function() {
        // Post using xhr
      }
      reader.readAsBinaryString(f)
    }
    

    请注意,并非所有浏览器都存在 FileReader 对象...(Chrome 确实支持它!)

    【讨论】:

    • 我相信 FileReader 是一个 HTML5 功能,@mohit 如果你的目标是现代浏览器,我也会考虑使用 FileReader。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 2013-05-13
    • 2014-08-24
    相关资源
    最近更新 更多