我正在尝试将文件上传与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:我发现了其他类似问题(example或example),但没有一个起作用。
编辑:这是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数据...