上传文件以使用REST api进行表单和提交

时间:2015-12-07 17:44:37

标签: ios swift forms http post

我的问题是我需要将文件上传到服务器(使用swift和REST),然后将其上传到设备。在服务器上我有一个表单(html,js),它可以通过使用POST请求以块的形式发送文件来处理上传到设备。所以看来我有两个选择。

1)我可以完全跳过表单并直接发布到设备上,但我必须处理切片文件,并在swift中以客户端方式发送数据块,或者

2)我可以以某种方式使用REST apis将文件上传到表单中的输入,然后再次使用REST提交表单,允许服务器处理设备之间的事务。

如果2不可能,我可以处理选项1,但我真的希望选项2成为可能,而且我在这个社区的经验很少。

以下是表格:

HTML:

<html>
    <head>
        <link rel="stylesheet" href="mystyle.css">
        <script type="text/javascript" src="//jsSrc"></script>
    </head>
    <body>
        <div class="upgrade_panel">
            <input class="file_selector" type="file" name="fileImage" id="firmware_image"></input>
            <button class= "upgrade_button" type="button" id="upgradeButton" onclick="send_file_in_chunks()" >Start upgrade</button>
    </div>
</html>

Javascript:

function send_file_in_chunks(){
    var file = document.getElementById("firmware").files[0];
    var tmp = file.name.split(".");
    var app_index = tmp[1];
    var upgrade_chunk_url_with_query;
    var current_pos = 0;
    var size = file.size;
    var expected_md5 = //expected_md5

    if (window.XMLHttpRequest) {
        xhr = new XMLHttpRequest();
    } else {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }
    upgrade_chunk_url_with_query = "upgrade_chunk.html" + "?" + "offset=" + current_pos + "&" + "filesize=" + size + "&" + "appindex=" + app_index + "&" + "expected_md5=" + expected_md5;
    xhr.open('POST', upgrade_chunk_url_with_query , true);
    xhr.onreadystatechange= send_function;

    function send_function() {
        if ( (xhr.readyState==4 && xhr.status==200) ) {
            //Send some data
        } else {
        if ( (xhr.readyState==4 && xhr.status== 0) ) {
            //Re-send some data
        }
    }
}   

非常感谢任何反馈。

1 个答案:

答案 0 :(得分:0)

那么,“大数据”有多大?对于当前的设备,100MB的文件并不合理,10MB或更小的文件根本不大。

有时会进行切片,以便在传输中断时可以恢复,AWS就是一个例子。

如果数据要大到完全适合内存,请考虑使用流式传输到文件。