Sto cercando di caricare i file utilizzando un approccio simile HttpClient: How to upload multiple files at once in Windows Phone.Qual è la migliore strategia per caricare file di grandi dimensioni utilizzando HttpClient in un dispositivo Windows Phone con memoria insufficiente?
using (var content = new MultipartFormDataContent())
{
content.Add(CreateFileContent(imageStream, "image.jpg", "image/jpeg"));
content.Add(CreateFileContent(signatureStream, "image.jpg.sig", "application/octet-stream"));
var response = await httpClient.PostAsync(_profileImageUploadUri, content);
response.EnsureSuccessStatusCode();
}
private StreamContent CreateFileContent(Stream stream, string fileName, string contentType)
{
var fileContent = new StreamContent(stream);
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "\"files\"",
FileName = "\"" + fileName + "\""
}; // the extra quotes are key here
fileContent.Headers.ContentType = new MediaTypeHeaderValue(contentType);
return fileContent;
}
Questo funziona correttamente durante il caricamento di file di piccole dimensioni. Se ho provato a caricare file di dimensioni maggiori (ad esempio> 50mb) in un dispositivo di fascia bassa (memoria da 512 MB), lancia System.OutOfMemoryException. Ho usato gli strumenti diagnostici per monitorare il consumo di memoria e ho notato che la memoria cresce in modo esponenziale durante la chiamata PostAsync. Sembra che copi l'intero contenuto nella memoria. Al momento non abbiamo il supporto di chunking nell'api .
Qual è la strategia migliore per caricare file di grandi dimensioni utilizzando HttpClient in un dispositivo Windows Phone con memoria insufficiente?
Ecco una soluzione: http://stackoverflow.com/questions/26223902/window-phone-8-submit-post-form-with-an-image/26243886#26243886 –
Che dire 'di Windows. Networking.BackgroundTransfer.BackgroundUploader'? Guarda qui: http://stackoverflow.com/a/27430331/27211 – kiewic
Tutte le chiamate API per il download e il caricamento sono implementate in un SDK (Portable class Library che supporta .net 4.5.1, Windows Phone 8.1 e Windows Store 8.1). Per quanto ne so il supporto per Windows.Networking.BackgroundTransfer.BackgroundUploader non è disponibile in PCL, correggere se ho torto. Devo implementarlo usando HttpClient. –