【问题标题】:Upload binary data from Safari, without user selecting a file从 Safari 上传二进制数据,无需用户选择文件
【发布时间】:2012-07-06 14:35:17
【问题描述】:

有几个 HTML5 功能(BlobBuilder、ArrayBuffer)和 pre-HTML5 hacks (charset=x-user-defined) 用于处理XMLHttpRequest 中的二进制数据。

据我所知,没有什么可以让 Safari 上传不在用户交互选择的文件中的二进制数据,并以"multipart/form-data" 传输。

事实上,我要发送的数据已经在文件系统中,并且我有一个file:// URL。这是一个PhoneGap 应用程序。但是由于存在安全风险,没有办法让浏览器接受,而且PhoneGap的FileTransfer功能没有用,因为它缺乏进度条支持。

此时,我愿意完全放弃兼容性,因为 HTML 和 JavaScript 文件将被下载并存储在客户端。而且该应用程序已经需要 iPhone 4,因此我可以要求使用最新的浏览器版本。有没有办法让 Safari 5.1 以二进制形式上传?

【问题讨论】:

    标签: ajax upload safari binary xmlhttprequest


    【解决方案1】:

    也许Phonegap的文件上传插件(iOS version,iPhone version)可以提供帮助?它有一个进度回调。

    progress 在上传进度时调用。签名应该是function(bytesUploaded, totalBytes)

    文档中的示例:

    window.plugins.fileUploader.uploadByUri(
        'http://example.com/upload',
        'file://path/to/file.jpg', 
        {foo: 'bar'}, 
        'myPhoto', 
        'anImage.jpg',
        'image/jpeg', 
        function(result) {
            console.log('Done: ' + result);
        }, 
        function(result) {
            console.log("Error: " + result);
        }, 
        function(loaded, total) {
            var percent = 100 / total * loaded;
            console.log('Uploaded  ' + percent);
    
        }
    );
    

    【讨论】:

    • 我认为我之前看到了对它的引用……它是捆绑 FileTransfer 插件的祖先吗?看起来“iOS”版本比“iPhone”版本更新:github.com/phonegap/phonegap-plugins/tree/master/iOS/…。并且界面与安卓版本不兼容。现在,我只是硬着头皮在 Base64 中上传。如果 Apple 希望他们的应用程序运行速度比 Android 慢,这是他们的特权:vP。
    • 你说得对,iPhone 版本引用的是PhoneGap 而不是Cordova。希望 Base64 上传也能正常工作,即使速度较慢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    相关资源
    最近更新 更多