Je travaille sur une fonction qui va écrire des données sur un serveur distant en morceaux en utilisant une API tierce. Grâce à de l'aide sur Stack Overflow, j'ai pu accomplir cela, où il fonctionne maintenant comme prévu. Le problème est que je ne peux écrire qu'un seul bloc de 16 Ko car je devrai avancer le pos
de l'endroit où les octets suivants sont écrits.Obtenir la position d'octet pendant la boucle de téléchargement
L'écriture initiale commence à 0 facilement. En raison de mon manque de familiarité avec cela, je ne suis pas sûr si le prochain pos
devrait juste être 16 ou quoi. Si cela aide, l'appel API writeFileChunk()
prend 3 paramètres, chemin de fichier (str), pos (int64) et données (chaîne codée en 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);
}
})()
};
Qu'est-ce que l'API 3ème partie, et ne la documentation mentionne pas cela? // Supposer que ce soit juste la position de l'octet semble être une supposition assez juste - alors quels résultats avez-vous obtenus lorsque vous avez essayé cela? – CBroe
Si cette API tierce ne permet que le téléchargement en base64, je ne l'utiliserais pas ... – Endless