C#HttpClient 4.5多部分/表单数据上传
有人知道如何将.Net 4.5中的C#HttpClient 4.5多部分/表单数据上传,c#,upload,.net-4.5,multipartform-data,dotnet-httpclient,C#,Upload,.net 4.5,Multipartform Data,Dotnet Httpclient,有人知道如何将.Net 4.5中的HttpClient与multipart/form data上载一起使用吗 我在互联网上找不到任何示例。它或多或少是这样工作的(使用图像/jpg文件的示例): 异步公共任务上载映像(字符串url,字节[]ImageData) { var requestContent=new MultipartFormDataContent(); //如果需要,可以在此处指定边界---^ var imageContent=新的ByteArrayContent(ImageData)
HttpClient
与multipart/form data
上载一起使用吗
我在互联网上找不到任何示例。它或多或少是这样工作的(使用图像/jpg文件的示例): 异步公共任务上载映像(字符串url,字节[]ImageData) { var requestContent=new MultipartFormDataContent(); //如果需要,可以在此处指定边界---^ var imageContent=新的ByteArrayContent(ImageData); imageContent.Headers.ContentType= MediaTypeHeaderValue.Parse(“图像/jpeg”); Add(imageContent,“image”,“image.jpg”); return wait client.PostAsync(url、requestContent); } (您可以
requestContent.Add()
无论您想要什么,都可以查看以查看要传入的可用类型)
完成后,您将在
HttpResponseMessage.content
中找到响应内容,您可以使用HttpContent.ReadAs*Async
使用该内容。我的结果如下所示:
public static async Task<string> Upload(byte[] image)
{
using (var client = new HttpClient())
{
using (var content =
new MultipartFormDataContent("Upload----" + DateTime.Now.ToString(CultureInfo.InvariantCulture)))
{
content.Add(new StreamContent(new MemoryStream(image)), "bilddatei", "upload.jpg");
using (
var message =
await client.PostAsync("http://www.directupload.net/index.php?mode=upload", content))
{
var input = await message.Content.ReadAsStringAsync();
return !string.IsNullOrWhiteSpace(input) ? Regex.Match(input, @"http://\w*\.directupload\.net/images/\d*/\w*\.[a-z]{3}").Value : null;
}
}
}
}
公共静态异步任务上载(字节[]图像)
{
使用(var client=new HttpClient())
{
使用(var)内容=
新的MultipartFormDataContent(“上载--”+DateTime.Now.ToString(CultureInfo.InvariantCulture)))
{
添加(新的StreamContent(新的MemoryStream(图像)),“bilddatei”,“upload.jpg”);
使用(
var消息=
等待客户端。PostAsync(“http://www.directupload.net/index.php?mode=upload“,内容))
{
var input=wait message.Content.ReadAsStringAsync();
return!string.IsNullOrWhiteSpace(input)?Regex.Match(input,@“http://\w*\.directupload\.net/images/\d*/\w*\.[a-z]{3}”)。值:null;
}
}
}
}
这是一个如何使用MultipartFormDataContent向HTTPClient发布字符串和文件流的示例。需要为每个HTTPContent指定内容配置和内容类型:
这是我的例子。希望有帮助:
private static void Upload()
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("User-Agent", "CBS Brightcove API Service");
using (var content = new MultipartFormDataContent())
{
var path = @"C:\B2BAssetRoot\files\596086\596086.1.mp4";
string assetName = Path.GetFileName(path);
var request = new HTTPBrightCoveRequest()
{
Method = "create_video",
Parameters = new Params()
{
CreateMultipleRenditions = "true",
EncodeTo = EncodeTo.Mp4.ToString().ToUpper(),
Token = "x8sLalfXacgn-4CzhTBm7uaCxVAPjvKqTf1oXpwLVYYoCkejZUsYtg..",
Video = new Video()
{
Name = assetName,
ReferenceId = Guid.NewGuid().ToString(),
ShortDescription = assetName
}
}
};
//Content-Disposition: form-data; name="json"
var stringContent = new StringContent(JsonConvert.SerializeObject(request));
stringContent.Headers.Add("Content-Disposition", "form-data; name=\"json\"");
content.Add(stringContent, "json");
FileStream fs = File.OpenRead(path);
var streamContent = new StreamContent(fs);
streamContent.Headers.Add("Content-Type", "application/octet-stream");
//Content-Disposition: form-data; name="file"; filename="C:\B2BAssetRoot\files\596090\596090.1.mp4";
streamContent.Headers.Add("Content-Disposition", "form-data; name=\"file\"; filename=\"" + Path.GetFileName(path) + "\"");
content.Add(streamContent, "file", Path.GetFileName(path));
//content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
Task<HttpResponseMessage> message = client.PostAsync("http://api.brightcove.com/services/post", content);
var input = message.Result.Content.ReadAsStringAsync();
Console.WriteLine(input.Result);
Console.Read();
}
}
}
private static void Upload()
{
使用(var client=new HttpClient())
{
client.DefaultRequestHeaders.Add(“用户代理”,“CBS Brightcove API服务”);
使用(var content=new MultipartFormDataContent())
{
var path=@“C:\B2BAssetRoot\files\596086\596086.1.mp4”;
字符串assetName=Path.GetFileName(Path);
var请求=新的HttpBrightCoverRequest()
{
方法=“创建视频”,
参数=新参数()
{
CreateMultipleRenditions=“true”,
EncodeTo=EncodeTo.Mp4.ToString().ToUpper(),
Token=“x8sLalfXacgn-4CzhTBm7uaCxVAPjvKqTf1oXpwLVYYoCkejZUsYtg..”,
视频=新视频()
{
名称=资产名称,
ReferenceId=Guid.NewGuid().ToString(),
ShortDescription=assetName
}
}
};
//内容处置:表单数据;name=“json”
var stringContent=newstringcontent(JsonConvert.SerializeObject(请求));
添加(“内容处置”,“表单数据;名称=\“json\”);
Add(stringContent,“json”);
FileStream fs=File.OpenRead(路径);
var streamContent=新的streamContent(fs);
添加(“内容类型”、“应用程序/八位字节流”);
//内容配置:表单数据;name=“file”;filename=“C:\B2BaseTroot\files\596090\596090.1.mp4”;
streamContent.Headers.Add(“内容处置”,“表单数据;名称=\”文件\“;文件名=\”+路径.GetFileName(路径)+”\”);
Add(streamContent,“file”,Path.GetFileName(Path));
//content.Headers.ContentDisposition=新的ContentDispositionHeaderValue(“附件”);
任务消息=client.PostAsync(“http://api.brightcove.com/services/post“,内容);
var input=message.Result.Content.ReadAsStringAsync();
控制台写入线(输入结果);
Console.Read();
}
}
}
这是一个对我有用的完整示例。请求中的边界
值由.NET自动添加
var url = "http://localhost/api/v1/yourendpointhere";
var filePath = @"C:\path\to\image.jpg";
HttpClient httpClient = new HttpClient();
MultipartFormDataContent form = new MultipartFormDataContent();
FileStream fs = File.OpenRead(filePath);
var streamContent = new StreamContent(fs);
var imageContent = new ByteArrayContent(streamContent.ReadAsByteArrayAsync().Result);
imageContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data");
form.Add(imageContent, "image", Path.GetFileName(filePath));
var response = httpClient.PostAsync(url, form).Result;
试试这个,它对我有用
私有静态异步任务上载(字符串actionUrl)
{
Image newImage=Image.FromFile(@“图像的绝对路径”);
ImageConverter_ImageConverter=新的ImageConverter();
byte[]paramFileStream=(byte[])_imageConverter.ConvertTo(newImage,typeof(byte[]);
var formContent=新的MultipartFormDataContent
{
//在此处发送表单文本值
{new StringContent(“value1”),“key1”},
{new StringContent(“value2”),“key2”},
//在这里发送图像
{new StreamContent(new MemoryStream(paramFileStream)),“imagekey”,“filename.jpg”}
};
var myHttpClient=新的HttpClient();
var response=wait myHttpClient.PostAsync(actionUrl.ToString(),formContent);
string stringContent=wait response.Content.ReadAsStringAsync();
返回响应;
}
这里是另一个关于如何使用HttpClient
上传多部分/表单数据的示例
它将文件上载到RESTAPI,并包括文件本身(例如JPG)和其他API参数。该文件通过FileStream
从本地磁盘直接上载
有关包括附加API特定逻辑的完整示例,请参阅
public static async Task UploadFileAsync(string token, string path, string channels)
{
// we need to send a request with multipart/form-data
var multiForm = new MultipartFormDataContent();
// add API method parameters
multiForm.Add(new StringContent(token), "token");
multiForm.Add(new StringContent(channels), "channels");
// add file and directly upload it
FileStream fs = File.OpenRead(path);
multiForm.Add(new StreamContent(fs), "file", Path.GetFileName(path));
// send request to API
var url = "https://slack.com/api/files.upload";
var response = await client.PostAsync(url, multiForm);
}
公共异步任务PassImageWithText(IFormFile文件)
{
字节[]数据;
字符串结果=”;
ByteArrayContent字节;
MultipartFormDataContent multiForm=新的MultipartFormDataContent();
尝试
{
使用(var-clie)
public static async Task UploadFileAsync(string token, string path, string channels)
{
// we need to send a request with multipart/form-data
var multiForm = new MultipartFormDataContent();
// add API method parameters
multiForm.Add(new StringContent(token), "token");
multiForm.Add(new StringContent(channels), "channels");
// add file and directly upload it
FileStream fs = File.OpenRead(path);
multiForm.Add(new StreamContent(fs), "file", Path.GetFileName(path));
// send request to API
var url = "https://slack.com/api/files.upload";
var response = await client.PostAsync(url, multiForm);
}