c# - Httpclient multipart/form-data 推送图片
问题描述
我正在尝试使用 Httpclient.SendAsync 或 Httpclient.PutAsync 发送带有二进制文件的 Put 请求以上传到服务器。但我得到的只是服务器响应中的 400 个错误请求。这是代码
private static HttpResponseMessage Upload()
{
var apiUri = string.Format(url);
string url = (url);
var message = new HttpRequestMessage();
message.RequestUri = new Uri(apiUri);
message.Method = HttpMethod.Put;
var fileObj = Images.ChooseImageAndToInfoObject();
using (var client = new HttpClient())
using (var content = new MultipartFormDataContent())
{
var filestream = new FileStream(fileObj.filePath, FileMode.Open);
content.Add(new StreamContent(filestream), fileObj.fileName, fileObj.fileNameWithExtension);
content.Add(new StringContent("file"), "withName");
content.Add(new StringContent("string"), "fileName");
content.Add(new StringContent("image/*"), "mimeType");
message.Content = content;
message.Headers.Add("Authorization", MyToken);
// var res = client.SendAsync(message).Result;
var response = client.PutAsync(url, content).Result;
return response;
}
希望你们,伙计们
解决方案
是否有必要通过 multipart-formdata 发送文件名和 mimetype?如果不尝试将数据作为 StreamContent 发送并通过内容头设置文件名和 mime 类型:
private static HttpResponseMessage Upload()
{
var apiUri = string.Format(url);
string url = (url);
var message = new HttpRequestMessage();
message.RequestUri = new Uri(apiUri);
message.Method = HttpMethod.Put;
var fileObj = Images.ChooseImageAndToInfoObject();
using (var client = new HttpClient())
var filestream = new FileStream(fileObj.filePath, FileMode.Open);
var content = new StreamContent(filestream);
content.Headers.ContentType = new MediaTypeHeaderValue(MimeMapping.GetMimeMapping(fileObj.filePath));
content.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "\"files\"",
FileName = "\"" + fileName + "\""
};
message.Content = content;
message.Headers.Add("Authorization", MyToken);
// var res = client.SendAsync(message).Result;
var response = client.PutAsync(url, content).Result;
return response;
如果您将文件设置为特定 id 或通过 Post,则通过 PUT 发送内容:
var response = client.PostAsync(url, content).Result;
推荐阅读
- javascript - 页面元素缩进
- xml - XSLT 按相同的键值合并节点子元素
- kubernetes - 通过 HTTPS 访问 istio/k8s 服务
- text - 如何在熊猫中读取特定的文本文件
- bash - 打印匹配并对每个匹配应用转换
- visual-studio-code - 如何修复jsdoc自动完成在vscode中不起作用
- java - 在变量声明中使用括号
- google-sheets - 将多行转换为 Google 工作表中的列
- elasticsearch - elasticsearch node.ROLE 配置
- angular - 我可以让 NgModule 提供其他 NgModule 吗?