WebClient的UploadFile和UploadData没有发送相同的标头(包含multipart / form-data)

时间:2019-01-22 10:52:31

标签: c# .net webclient dotnet-httpclient

我正在尝试将文件上传与API集成在一起,这对于他们希望如何发送数据非常明确:

  

您可以发出POST请求,格式为multipart / form-data。该文件的字段应命名为file。

请记住,我无权访问文件本身(我有byte[])意味着我无法使用WebClient.UploadFile(url, filePath)

相反,我有WebClient.UploadData(url, byte[]),应该可以很好地满足我的需求。

事实是,如果我使用UploadData方法而不是UploadFile,则API感觉好像尚未发送(使用更多信息更新了这个问题),这是UploadFile方法不会发生。

我指定了client.Headers["Content-Type"] = "binary/octet-stream"标头,它是与UploadFile方法一起使用的标头。

我曾经尝试过"multipart/form-data",但是没有运气。我很确定我在与此“标头”有关的事情上失败了。任何信息或帮助将不胜感激。

工作 WebClient的UploadFile方法:

using (var client = new WebClient())
{
    client.Headers["Content-Type"] = "binary/octet-stream";
    string url = processUrl + $"?input=upload&format={file.Extension}&file={file.Name}";
    var result = client.UploadFile(url, fileData);

    return Encoding.UTF8.GetString(result, 0, result.Length);
}

不起作用 WebClient的UploadData方法:

using (var client = new WebClient())
{
    client.Headers["Content-Type"] = "binary/octet-stream";
    string url = processUrl + $"?input=upload&format={file.Extension}&file={file.Name}";
    var result = client.UploadData(url, data);

    return Encoding.UTF8.GetString(result, 0, result.Length);
}

我宁愿专注于使其工作,然后将其简单地迁移到async

P.S:我发现了其他类似问题(exampleexample),但没有一个起作用。

编辑:这是Fiddler在两个请求中实际显示的内容:

UploadFile的:

  

开机自检   https://heidi.infra.cloudconvert.com/process/950a6550-e4ba-46f2-8d20-7ffe7c0309c3?input=upload&format=pdf&file=c%3a%2ftemp%2fprueba.docx&email=   HTTP / 1.1 Content-Type:multipart / form-data;   boundary = --------------------- 8d68062f657b700主机:   heidi.infra.cloudconvert.com内容长度:12842期望:   100-继续

     

----------------------- 8d68062f657b700 Content-Disposition:表格数据; name =“文件”; filename =“ prueba.docx”内容类型:二进制/八位字节流

UploadData的:

  

开机自检   https://roberta.infra.cloudconvert.com/process/950a6550-e4ba-46f2-8d20-7ffe7c0309c3?input=upload&format=pdf&file=prueba.docx   HTTP / 1.1内容类型:二进制/八位字节流主机:   roberta.infra.cloudconvert.com内容长度:12652预期:   100-继续

API的期望:

  

POST https://srv01.cloudconvert.com/upload/~Gl47wdgf6内容类型:   多部分/表单数据; boundary = foo_bar_baz内容长度:   number_of_bytes_in_entire_request_body

     

-foo_bar_baz内容处置:文件; filename =“ inputfile.jpg”内容大小:98344内容类型:application / octet-stream

     

... JPEG数据...

0 个答案:

没有答案