首页 > 后端开发 > php教程 > 如何在 Windows Phone 8 中使用 HTTP POST Multipart/Form-Data 成功上传文件并传递附加参数?

如何在 Windows Phone 8 中使用 HTTP POST Multipart/Form-Data 成功上传文件并传递附加参数?

Patricia Arquette
发布: 2024-12-15 00:19:10
原创
792 人浏览过

How to Successfully Upload Files and Pass Additional Parameters with HTTP POST Multipart/Form-Data in Windows Phone 8?

在 Windows Phone 8 中使用 HTTP POST Multipart/Form-Data 上传文件

开发 Windows Phone 8 应用程序时,通常需要将文件上传到服务器。这可以使用带有 multipart/form-data MIME 类型的 HTTP POST 来实现。但是,Windows Phone 8 有一些特定的注意事项。

代码示例和错误说明

提供的代码示例尝试使用以下方式上传文件并传递字符串参数(“userid=SOME_ID”) HTTP POST 多部分/表单数据。但是遇到了文件上传不成功的问题。

具体问题出在 GetRequestStreamCallback 方法上。使用 request.EndGetRequestStream(asynchronousResult) 获取请求流,但“userid=some_user_id”参数未添加到请求中。

传递附加参数

传递附加参数,例如“ userid”,有必要为 multipart/form-data 请求创建边界。此边界分隔了请求的不同部分(文件和附加参数)。

改进的代码示例

这是一个改进的代码示例,可以正确处理多部分/表单数据请求并传递附加参数:

private void HttpPost(byte[] fileBytes, string additionalParam)
{
    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.myserver.com/upload.php");
    httpWebRequest.ContentType = "multipart/form-data; boundary=---------------------------" + DateTime.Now.Ticks.ToString("x");
    httpWebRequest.Method = "POST";
    var asyncResult = httpWebRequest.BeginGetRequestStream((ar) => { GetRequestStreamCallback(ar, fileBytes, additionalParam); }, httpWebRequest);  
}

private void GetRequestStreamCallback(IAsyncResult asynchronousResult, byte[] postData, string additionalParam)  
{
    HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;  
    Stream postStream = request.EndGetRequestStream(asynchronousResult); 

    // Create boundary start string
    string boundaryStart = "--" + request.ContentType.Substring(request.ContentType.IndexOf('=') + 1);

    // Write file content
    string fileBoundary = boundaryStart + Environment.NewLine + "Content-Disposition: form-data; name=\"file\"; filename=\"myfile.db\"" + Environment.NewLine + "Content-Type: application/octet-stream" + Environment.NewLine + Environment.NewLine;
    postStream.Write(Encoding.UTF8.GetBytes(fileBoundary), 0, fileBoundary.Length);   
    postStream.Write(postData, 0, postData.Length);  

    // Write additional parameter
    string paramBoundary = Environment.NewLine + boundaryStart + Environment.NewLine + "Content-Disposition: form-data; name=\"userid\"" + Environment.NewLine + Environment.NewLine + additionalParam + Environment.NewLine;
    postStream.Write(Encoding.UTF8.GetBytes(paramBoundary), 0, paramBoundary.Length);   

    // Write boundary end string
    string boundaryEnd = Environment.NewLine + "--" + request.ContentType.Substring(request.ContentType.IndexOf('=') + 1) + "--" + Environment.NewLine;
    postStream.Write(Encoding.UTF8.GetBytes(boundaryEnd), 0, boundaryEnd.Length);  

    postStream.Close();  
    var asyncResult = request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);  
}  
登录后复制

通过遵循这些准则,您可以成功地将文件上传到服务器并使用 HTTP POST multipart/form-data 传递其他参数Windows Phone 8 应用程序。

以上是如何在 Windows Phone 8 中使用 HTTP POST Multipart/Form-Data 成功上传文件并传递附加参数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板