我的问题是我需要将文件上传到服务器(使用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
}
}
}
非常感谢任何反馈。
答案 0 :(得分:0)
那么,“大数据”有多大?对于当前的设备,100MB的文件并不合理,10MB或更小的文件根本不大。
有时会进行切片,以便在传输中断时可以恢复,AWS就是一个例子。
如果数据要大到完全适合内存,请考虑使用流式传输到文件。