Tôi đang làm việc trên một chức năng sẽ ghi dữ liệu vào máy chủ từ xa theo các khối sử dụng API của bên thứ ba. Thông qua một số trợ giúp về Stack Overflow, tôi đã có thể thực hiện điều này, nơi nó hiện đang hoạt động như mong đợi. Vấn đề là tôi chỉ có thể nhận được một đoạn 16kb duy nhất để viết vì tôi sẽ cần phải tạm ứng pos
nơi các byte tiếp theo được ghi vào.Nhận Vị trí Byte trong Vòng Tải lên
Ghi ban đầu bắt đầu từ 0 một cách dễ dàng đủ. Do sự không quen thuộc của tôi với điều này mặc dù, tôi không chắc chắn nếu pos
tiếp theo chỉ nên là 16 hoặc những gì. Nếu nó giúp, cuộc gọi API writeFileChunk()
có 3 tham số, filepath (str), pos (int64) và dữ liệu (chuỗi được mã hóa base64).
reader.onload = function(evt)
{
// Get SERVER_ID from URL
var server_id = getUrlParameter('id');
$("#upload_status").text('Uploading File...');
$("#upload_progress").progressbar('value', 0);
var chunkSize = 16<<10;
var buffer = evt.target.result;
var fileSize = buffer.byteLength;
var segments = Math.ceil(fileSize/chunkSize); // How many segments do we need to divide into for upload
var count = 0;
// start the file upload
(function upload()
{
var segSize = Math.min(chunkSize, fileSize - count * chunkSize);
if (segSize > 0)
{
$("#upload_progress").progressbar('value', (count/segments));
var chunk = new Uint8Array(buffer, count++ * chunkSize, segSize); // get a chunk
var chunkEncoded = btoa(String.fromCharCode.apply(null, chunk));
// Send Chunk data to server
$.ajax({
type: "POST",
url: "filemanagerHandler.php",
data: { 'action': 'writeFileChunk', 'server_id': server_id, 'filepath': filepath, 'pos': 0, 'chunk': chunkEncoded },
dataType: 'json',
success: function(data)
{
console.log(data);
setTimeout(upload, 100);
},
error: function(XMLHttpRequest, textStatus, errorThrown)
{
alert("Status: " + textStatus); alert("Error: " + errorThrown); alert("Message: " + XMLHttpRequest.responseText);
}
});
}
else
{
$("#upload_status").text('Finished!');
$("#upload_progress").progressbar('value', 100);
getDirectoryListing(curDirectory);
}
})()
};
là gì mà API bên thứ 3, và không tài liệu không đề cập đến điều này? // Giả sử rằng nó có thể thực sự chỉ là vị trí byte có vẻ là một dự đoán đủ công bằng - vậy bạn đã nhận được kết quả gì khi bạn thử điều đó? – CBroe
Nếu api bên thứ 3 này chỉ cho phép tải lên base64 thì tôi sẽ không sử dụng nó ... – Endless