首页 >后端开发 >C++ >如何从 WCF REST 中的多部分/表单数据 POST 流中提取文件字节?

如何从 WCF REST 中的多部分/表单数据 POST 流中提取文件字节?

Barbara Streisand
Barbara Streisand原创
2025-01-01 02:45:15497浏览

How to Extract File Bytes from a Multipart/Form-Data POST Stream in WCF REST?

如何从 WCF REST 中的多部分/表单数据 POST 流中提取文件字节

将文件发布到 WCF REST 时通过 multipart/form-data 请求提供服务,结果流包含一系列边界、标头和文件字节。从此流中提取文件字节可能具有挑战性。

解决方案:利用 Microsoft 公共 API

Microsoft 提供了一组公共 API 来简化此过程:

  • System.Net.Http.dll(包含在 .NET 4.5 中或通过 NuGet for .NET 4)
  • System.Net.Http.Formatting.dll(通过适用于 .NET 4.5 和 .NET 4 的 NuGet)

实现:

此代码片段演示了如何使用这些来提取文件字节API:

using System.Net.Http;
using System.Net.Http.Formatting;
using System.Threading.Tasks;

public static async Task ParseFiles(Stream data, string contentType, Action<string, Stream> fileProcessor)
{
    var streamContent = new StreamContent(data);
    streamContent.Headers.ContentType = MediaTypeHeaderValue.Parse(contentType);

    var provider = await streamContent.ReadAsMultipartAsync();

    foreach (var httpContent in provider.Contents)
    {
        var fileName = httpContent.Headers.ContentDisposition.FileName;
        if (string.IsNullOrWhiteSpace(fileName))
            continue;

        using (Stream fileContents = await httpContent.ReadAsStreamAsync())
        {
            fileProcessor(fileName, fileContents);
        }
    }
}

用法示例:

如果您有 WCF REST 方法,您可以这样实现:

[OperationContract]
[WebInvoke(Method = WebRequestMethods.Http.Post, UriTemplate = "/Upload")]
void Upload(Stream data)
{
    MultipartParser.ParseFiles(
        data,
        WebOperationContext.Current.IncomingRequest.ContentType,
        MyProcessMethod);
}

文件处理:

在 MyProcessMethod 中,您可以指定对提取的文件字节执行的操作,例如将它们写入磁盘。

以上是如何从 WCF REST 中的多部分/表单数据 POST 流中提取文件字节?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn