> 백엔드 개발 > C++ > Windows Phone 8에서 HTTP POST Multipart/Form-Data를 사용하여 서버에 파일을 올바르게 업로드하는 방법은 무엇입니까?

Windows Phone 8에서 HTTP POST Multipart/Form-Data를 사용하여 서버에 파일을 올바르게 업로드하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-21 04:12:09
원래의
196명이 탐색했습니다.

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

HTTP POST Multipart/Form-Data를 사용하여 Windows Phone 8의 서버에 파일을 올바르게 업로드

웹 개발에서는 multipart/form-data와 함께 HTTP POST를 사용하여 서버에 파일을 업로드하는 것이 일반적인 작업입니다. 이 문서에서는 HTTPWebRequest를 사용하여 Windows Phone 8 앱에서 파일을 업로드할 때 발생하는 문제를 해결하고 향상된 솔루션을 제공합니다.

Windows Phone 8의 원본 코드

원래 구현에서는 HttpWebRequest를 사용하여 다중 부분/양식 데이터 POST 요청을 보냅니다. 그러나 코드는 메타데이터를 동반하지 않고 전체 파일을 보내려고 잘못 시도합니다. Multipart/form-data 요청은 파일 경계와 필요한 양식 데이터 헤더를 지정해야 합니다.

Windows Phone 8을 위한 향상된 솔루션

이 문제를 해결하기 위해 수정된 코드는 다음과 같습니다.

<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>
로그인 후 복사

결론

이 수정된 코드는 Windows Phone 8 앱의 파일 업로드 문제를 해결합니다. multipart/form-data 요청을 사용할 때 경계를 올바르게 지정하고 파일 및 동반 메타데이터에 필요한 헤더를 제공해야 합니다. 보다 명확한 Content-Disposition 헤더가 코드에 추가되었으며, 리소스의 올바른 릴리스를 보장하기 위해 using 문이 사용되었습니다.

위 내용은 Windows Phone 8에서 HTTP POST Multipart/Form-Data를 사용하여 서버에 파일을 올바르게 업로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿