6

ich eine Datei (Videodatei) zu durchBackgroundTransferService Server hochladen möchten.BackgroundTransferService mit POST-Methode und Parameter

Mein Problem ist, ich möchte auch senden 2 Parameter zusammen mit Datei (POST-Anfrage).

Also, ist es möglich, Parameter zusammen mit Datei-Upload während der Verwendung von BackgroundTransferService API ..?

Code mit BackgroundTransferService:

 BackgroundTransferRequest req = new BackgroundTransferRequest(new Uri("ServerURL", UriKind.Absolute)); 
     req.Method = "POST"; 
     req.TransferPreferences = TransferPreferences.AllowCellularAndBattery; 

     string uploadLocationPath = "/Shared/Transfers/myVideoFile.mp4"; 
     string downloadLocationPath = "/Shared/Transfers/response.txt"; 

     req.UploadLocation = new Uri(uploadLocationPath, UriKind.Relative); 
     req.DownloadLocation = new Uri(downloadLocationPath, UriKind.Relative); 

     req.TransferProgressChanged += req_TransferProgressChanged; 
     req.TransferStatusChanged += req_TransferStatusChanged; 

     try 
     { 
      BackgroundTransferService.Add(req); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Unable to add video to upload queue.\nPlease try again later.", App.appName, MessageBoxButton.OK); 
     } 

Bitte fragen, ob jemand weitere Informationen und nicht in der Lage möchte meine Frage zu verstehen.

Ich möchte eine schnelle Antwort. Ja oder Nein. Und wenn ja, wie?

Antwort

2

Ich lief vor ein paar Wochen in ähnlicher Art von Problem. Ich habe es irgendwie geschafft, diese Datei hochladen von HttpClient.

prüfen Code

 HttpClient client = new HttpClient(); 
     StorageFile file = null; // assign your file here 

     MultipartFormDataContent formdata = new MultipartFormDataContent(); 
     formdata.Add(new StringContent("value"), "key"); 
     formdata.Add(new StreamContent(await file.OpenStreamForReadAsync()), "file", "recordedVideoFile2.mp4"); 

     var response = await client.PostAsync(new Uri("URL here"), formdata); 
+0

danke für Ihre Antwort, aber ich möchte die Datei in 'Background' hochladen, so denke ich, ich muss' BackgroundTransferService' verwenden. –

+0

Ich würde empfehlen, Ihre Methoden als 'async' zu markieren und diese Methode einfach aufzurufen, um den Hintergrundprozess zu starten. "BackgroundTransferService" wird nicht mehr benötigt. –

+0

@FlorianMoser Vielen Dank für Ihre Eingaben, aber der Grund, warum ich 'BackgroundTransferService' verwenden muss ist, dass ich auch verfolgen möchte, wie viele Bytes hochgeladen wurden und wie viel übrig bleibt. Diese Statistiken können nur verfolgt werden, wenn wir BackgroundTransferService verwenden, nicht über 'HttpClient'. Gibt es noch eine Alternative? –

1

Ich bin nicht 100% sicher, was Sie zu tun versuchen. Ich glaube jedoch, dass Sie über HTTP-Header können.

BackgroundTransferRequest.Headers Immobilien
https://msdn.microsoft.com/en-us/library/windows/apps/microsoft.phone.backgroundtransfer.backgroundtransferrequest.headers(v=vs.105).aspx

Und als Absender mit dem Tag-Eigenschaft.
https://msdn.microsoft.com/en-us/library/windows/apps/microsoft.phone.backgroundtransfer.backgroundtransferrequest.tag(v=vs.105).aspx

Diese Eigenschaft kann mit einem Transfer benutzerdefinierten Daten zu assoziieren verbunden sind, verwendet werden. Die Anwendung kann den Wert festlegen, wenn die Übertragungsanforderung erstellt wird. Wenn die Übertragungsanforderung mithilfe der Requests -Eigenschaft oder der Find (String) -Methode abgerufen wird, enthält die Tag-Eigenschaft die zuvor festgelegten Daten . Diese Eigenschaft wird nur von der aufrufenden Anwendung verwendet und vom System ignoriert. Die maximale Länge dieser Eigenschaft beträgt 4000 Zeichen. Es wird jedoch empfohlen, die Größe der Daten kleiner zu halten, um die Leistung zu verbessern.

+0

Das habe ich schon ausprobiert ..! aber nein, das funktioniert nicht ... es gibt 'Error 400 Bad Request' und wird nicht erfolgreich abgeschlossen. Danke für deine Eingaben sowieso .. –