Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memuat Naik Fail ke Pelayan dengan betul menggunakan HTTP POST Multipart/Borang-Data dalam Windows Phone 8?

Bagaimana untuk Memuat Naik Fail ke Pelayan dengan betul menggunakan HTTP POST Multipart/Borang-Data dalam Windows Phone 8?

Linda Hamilton
Linda Hamiltonasal
2025-01-21 04:12:09239semak imbas

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

Muat naik fail dengan betul ke pelayan dalam Windows Phone 8 menggunakan HTTP POST Multipart/Borang-Data

Dalam pembangunan web, memuat naik fail ke pelayan menggunakan HTTP POST dengan multipart/form-data adalah tugas biasa. Artikel ini akan menyelesaikan isu yang dihadapi apabila menggunakan HTTPWebRequest untuk memuat naik fail dalam apl Windows Phone 8 dan menyediakan penyelesaian yang lebih baik.

Kod asal dalam Windows Phone 8

Pelaksanaan asal menggunakan HttpWebRequest untuk menghantar permintaan POST berbilang bahagian/data borang. Walau bagaimanapun, kod tersebut cuba menghantar keseluruhan fail secara salah tanpa metadata yang disertakan. Permintaan berbilang bahagian/data borang perlu menentukan sempadan fail dan pengepala data borang yang diperlukan.

Penyelesaian yang dipertingkatkan untuk Windows Phone 8

Untuk menyelesaikan masalah ini, berikut ialah kod yang diubah suai:

<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>

Kesimpulan

Kod yang diubah suai ini harus menyelesaikan isu muat naik fail dalam apl Windows Phone 8. Ingat, apabila menggunakan permintaan berbilang bahagian/data bentuk, pastikan anda menentukan sempadan dengan betul dan sediakan pengepala yang diperlukan untuk fail dan metadata yang disertakan. Pengepala Kandungan-Pelupusan yang lebih jelas telah ditambahkan pada kod dan menggunakan pernyataan digunakan untuk memastikan pelepasan sumber yang betul.

Atas ialah kandungan terperinci Bagaimana untuk Memuat Naik Fail ke Pelayan dengan betul menggunakan HTTP POST Multipart/Borang-Data dalam Windows Phone 8?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn