首頁 >後端開發 >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