15

我正在尝试上传带有正文内容的文件。是PostMultipartAsync唯一的方法吗?

在我的 C# 后端代码中,我有这个:

var resource = FormBind<StorageFileResource>();
var file = Request.Files.First().ToPostedFile();

FormBind从请求中读取数据并填充对象。

通过使用PostMultipartAsync我知道它应该像这样开始:

.PostMultipartAsync((mp) => { mp.AddFile(name, stream, name)}),但我不知道如何添加对象。你对此有什么想法吗?

这是我目前的尝试:

public static async Task<T> PostFileAsync<T>(string url, object data, string name, Stream stream, object queryString = null)
    where T : class
{
    return await HandleRequest(async () => queryString != null
        ? await url
            .SetQueryParams(queryString)
            .SetClaimsToken()
            .PostMultipartAsync((mp) => { mp.AddFile(name, stream, name)})
            .ReceiveJson<T>()
        : await url
            .SetClaimsToken()
            .PostMultipartAsync((mp) => mp.AddFile(name, stream, name))
            .ReceiveJson<T>());
}

前端发出的当前请求:

在此处输入图像描述

4

2 回答 2

32

有多种方法可以使用 Flurl 将“部分”添加到多部分 POST。我还没有将它添加到文档中,但这里有一个来自该问题的示例,它基本上展示了所有可能性:

var resp = await "http://api.com"
    .PostMultipartAsync(mp => mp
        .AddString("name", "hello!")                // individual string
        .AddStringParts(new {a = 1, b = 2})         // multiple strings
        .AddFile("file1", path1)                    // local file path
        .AddFile("file2", stream, "foo.txt")        // file stream
        .AddJson("json", new { foo = "x" })         // json
        .AddUrlEncoded("urlEnc", new { bar = "y" }) // URL-encoded                      
        .Add(content));                             // any HttpContent
于 2016-12-09T15:44:00.763 回答
0

这是一种对我有用的方法

var result = await endPointApi
    .AppendPathSegments("api","AppFileManager") 
    .WithOAuthBearerToken(token.AccessToken)
    .PostMultipartAsync(mp => mp
        //.AddFile("UploadFile", @"C:\Users\..\Documents\upload.txt")
        .AddFile("UploadFile", new MemoryStream(data), appFile.FileName)
        .AddStringParts(new 
        { 
            IRN = appFile.IRN,
            TransactionIRN = appFile.TransactionIRN, 
            FileName = appFile.FileName,
            TableName = appFile.TableName,
            FileExtension = appFile.FileExtension,
        })

Web Api 控制器实现(使用MediatR

[HttpPost]
public async Task<IActionResult> Post([FromForm] AppFileManagerCommands.Upload uploadAttachment)
{
  await mediator.Send(uploadAttachment);
  return NoContent(); 
}
于 2022-02-15T18:38:27.927 回答