j'ai donc un code que je l'ai utilisé pour télécharger des fichiers dans mon application, le long des lignes de ce:Upload gros fichier via URLSession
var mutableURLRequest = URLRequest(url: url)
var uploadData = try! Data(contentsOf: dataUrl)
session.uploadTask(with: mutableURLRequest, from: uploadData).resume()
Il y a un peu plus que cela, mais ceux-ci sont les parties pertinentes. Cependant, j'ai remarqué que pour certains grands fichiers vidéo Data(contentsOf: dataUrl)
échoue depuis le fichier est trop gros pour charger dans la mémoire. Je veux restructurer ceci afin que je puisse streamer morceau par morceau sur le serveur sans avoir à charger le fichier entier en mémoire. Je l'ai déjà compris sur mon serveur, le seul morceau que je n'ai pas compris est comment obtenir un chunkSize
morceau à partir des données dans une URL, sans le mettre dans un objet de données. Je veux essentiellement cette construction:
let chunkSize = 1024 * 1024
let offset = 0
let chunk = //get data from dataUrl of size chunkSize offset by offset
//Upload each chunk and increment offset
NSInputStream
semblait prometteur de pouvoir le faire, mais je ne suis pas en mesure de comprendre le minimum mis en place afin de tirer octets d'un fichier sur le disque de cette façon. Quel code puis-je utiliser ci-dessus pour remplir la ligne let chunk =
pour effectuer une telle tâche?
Avez-vous essayé 'uploadTask (avec: fromFile:)'? Il pourrait être assez intelligent pour diffuser à partir du fichier plutôt que de charger le tout dans 'Data'. Ou peut-être utiliser 'uploadTask (withStreamedRequest:)'. – rmaddy
Je suppose que ça ne va pas fonctionner pour moi puisque j'ai besoin de décorer chaque morceau avec une autre indésirable HTTP afin que mon serveur sache ce qui se passe. Cependant, tout ce qu'il utilise sous les couvertures pour faire cela peut être ce dont j'ai besoin. –