Heim > Backend-Entwicklung > C++ > Wie lade ich Dateien mit HTTP POST Multipart/Form-Data in Windows Phone 8 korrekt auf einen Server hoch?

Wie lade ich Dateien mit HTTP POST Multipart/Form-Data in Windows Phone 8 korrekt auf einen Server hoch?

Linda Hamilton
Freigeben: 2025-01-21 04:12:09
Original
238 Leute haben es durchsucht

How to Correctly Upload Files to a Server using HTTP POST Multipart/Form-Data in Windows Phone 8?

Dateien mit HTTP POST Multipart/Form-Data korrekt auf den Server in Windows Phone 8 hochladen

In der Webentwicklung ist das Hochladen von Dateien auf den Server mithilfe von HTTP POST mit Multipart-/Formulardaten eine häufige Aufgabe. In diesem Artikel werden Probleme behoben, die bei der Verwendung von HTTPWebRequest zum Hochladen von Dateien in Windows Phone 8-Apps auftreten, und eine verbesserte Lösung bereitgestellt.

Originalcode in Windows Phone 8

Die ursprüngliche Implementierung verwendet HttpWebRequest, um mehrteilige/Formulardaten-POST-Anfragen zu senden. Der Code versucht jedoch fälschlicherweise, die gesamte Datei ohne zugehörige Metadaten zu senden. Bei mehrteiligen/Formulardatenanforderungen müssen Dateigrenzen und die erforderlichen Formulardatenheader angegeben werden.

Verbesserte Lösungen für Windows Phone 8

Um dieses Problem zu lösen, ist der folgende geänderte Code:

<code class="language-csharp">async void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    var file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(DBNAME);
    byte[] fileBytes = null;
    using (var stream = await file.OpenReadAsync())
    {
        fileBytes = new byte[stream.Size];
        using (var reader = new DataReader(stream))
        {
            await reader.LoadAsync((uint)stream.Size);
            reader.ReadBytes(fileBytes);
        }
    }

    string boundary = Guid.NewGuid().ToString();
    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.myserver.com/upload.php");
    httpWebRequest.ContentType = "multipart/form-data; boundary=" + boundary;
    httpWebRequest.Method = "POST";

    httpWebRequest.BeginGetRequestStream(GetRequestStreamCallback, new object[] { fileBytes, boundary });
}

private void GetRequestStreamCallback(IAsyncResult asynchronousResult, object state)
{
    object[] stateData = (object[])state;
    byte[] postData = (byte[])stateData[0];
    string boundary = (string)stateData[1];
    HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
    Stream postStream = request.EndGetRequestStream(asynchronousResult);

    //写入起始边界
    byte[] boundaryBytes = System.Text.Encoding.UTF8.GetBytes("--" + boundary + "\r\n");
    postStream.Write(boundaryBytes, 0, boundaryBytes.Length);

    //写入文件数据
    string filename = DBNAME;
    byte[] fileData = System.Text.Encoding.UTF8.GetBytes($"Content-Disposition: form-data; name=\"file\"; filename=\"{filename}\"\r\nContent-Type: application/octet-stream\r\n\r\n");
    postStream.Write(fileData, 0, fileData.Length);
    postStream.Write(postData, 0, postData.Length);

    //写入结束边界
    boundaryBytes = System.Text.Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");
    postStream.Write(boundaryBytes, 0, boundaryBytes.Length);

    postStream.Close();
    request.BeginGetResponse(GetResponseCallback, request);
}

private void GetResponseCallback(IAsyncResult asynchronousResult)
{
    HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
    using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult))
    using (Stream streamResponse = response.GetResponseStream())
    using (StreamReader streamRead = new StreamReader(streamResponse))
    {
        string responseString = streamRead.ReadToEnd();
        // 处理服务器响应
    }
}</code>
Nach dem Login kopieren

Fazit

Dieser geänderte Code sollte Probleme beim Hochladen von Dateien in Windows Phone 8-Apps beheben. Denken Sie daran, bei der Verwendung von Multipart-/Formulardatenanfragen darauf zu achten, die Grenzen korrekt anzugeben und die erforderlichen Header für die Datei und die zugehörigen Metadaten bereitzustellen. Dem Code wurde ein klarerer Content-Disposition-Header hinzugefügt, und es werden Using-Anweisungen verwendet, um die korrekte Freigabe von Ressourcen sicherzustellen.

Das obige ist der detaillierte Inhalt vonWie lade ich Dateien mit HTTP POST Multipart/Form-Data in Windows Phone 8 korrekt auf einen Server hoch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage