12

现在,我在我的 iPhone 应用程序上创建了一个 HTTP 服务器,并在那里托管了 HTML。然后在与 iPhone 处于同一网络的系统的浏览器上访问它。我可以在浏览器上看到文件。

现在使用 WebSockets 我正在尝试将文件从浏览器发送到应用程序,但它不起作用。短信可以,但数据不行。作为一种解决方法,我通过 Base64 String 进行了尝试,但在这种情况下,socket Get Closed 也是如此。

为了使用 JAVAScript 上传,我编写了这段代码,在这里我尝试发送 Base64 字符串,片段大小为 200 个字符。

    function sendFile() {
        var preview = document.querySelector('img');
        var file = document.querySelector('input[type=file]').files[0];
        var reader  = new FileReader();
        var rawData =  new ArrayBuffer();


        reader.onloadend = function () {
        var stringContent = reader.result;
        preview.src = stringContent;
        var array =  stringContent.match(/.{1,200}/g);
        for (var i = 0; i < array.length; i++) {
            ws.send(array[i]);
        };

      }
     if (file) {
        reader.readAsDataURL(file);
     }else {
        preview.src = "";
     }
}

在 iPhone 端,我使用了来自Libary CocoaHTTPServer的WebSocket

套接字在此行关闭。

套接字在此行关闭。

编辑

经过大量的试验和错误后,我才知道如果我在 Mac 的浏览器中打开它,而不是在任何其他设备的浏览器(如 iPad、iPhone)中打开它,就会发生这种情况。这是一个非常奇怪的用例,但它是真的。

编辑二

经过很多疑惑,我找到了一个线索,这在 iPhone、iPad、iPod 和 Opera 浏览器上运行良好,因为它们有旧的 websocket 支持,我从这里找到了这个。.

在这个问题中,Guy 有相反的情况,他试图关闭这些浏览器上的连接,在我的情况下,它正在关闭其他浏览器,如 chrome、Mozilla 等。这是因为所谓的Hybi 格式数据包。这可能会帮助某人为我的案例提出解决方案。

4

2 回答 2

1

我认为您应该查看官方的 CocoaHTTPServer 示例。http文件上传有一个:https ://github.com/robbiehanson/CocoaHTTPServer/tree/master/Samples/SimpleFileUploadServer

于 2015-06-20T18:12:20.833 回答
0

ws:协议是否允许?例如config.xml

<access origin="ws://192.168.1.xx/*"/>
于 2015-06-20T11:19:08.837 回答