C# 使用HttpClient多部分/表单数据发送多文件

C# 使用HttpClient多部分/表单数据发送多文件,c#,httpclient,multipartform-data,cmultifileupload,C#,Httpclient,Multipartform Data,Cmultifileupload,我正在尝试使用HttpClient发布多部分/表单数据 表单需要一定数量的图像 代码: var client = new System.Net.Http.HttpClient(); var content = new MultipartFormDataContent(); var postData = new List<KeyValuePair(string,string)> (); postData.Add(new KeyValuePair < string, string

我正在尝试使用HttpClient发布多部分/表单数据

表单需要一定数量的图像

代码:

var client = new System.Net.Http.HttpClient();
var content = new MultipartFormDataContent();
var postData = new List<KeyValuePair(string,string)> ();
postData.Add(new KeyValuePair < string, string > ("function", "picture2"));
postData.Add(new KeyValuePair < string, string > ("username ", UserID));
postData.Add(new KeyValuePair < string, string > ("password ", Password));
foreach(var keyValuePair in postData) {
content.Add(new StringContent(keyValuePair.Value),
    String.Format("\"{0}\"", keyValuePair.Key));
}
int x = 1;
foreach(Bitmap item in newpics) {
using(MemoryStream ms = new MemoryStream()) {
    item.Save(ms, ImageFormat.Bmp);
    byte[] bits = ms.ToArray();
    content.Add(new ByteArrayContent(bits), '"' + "pict" + x + '"');
    x += 1;
}
}
var client=new System.Net.Http.HttpClient();
var content=新的MultipartFormDataContent();
var postData=新列表();
添加(新的KeyValuePair(“函数”,“图片2”));
添加(新的KeyValuePair(“用户名”,UserID));
添加(新的KeyValuePair(“password”,password));
foreach(postData中的var keyValuePair){
添加(新的StringContent(keyValuePair.Value),
格式(“\”{0}\”,keyValuePair.Key));
}
int x=1;
foreach(新图片中的位图项){
使用(MemoryStream ms=new MemoryStream()){
保存(ms,ImageFormat.Bmp);
字节[]位=ms.ToArray();
添加(新的ByteArrayContent(位),“+”pict“+x+”);
x+=1;
}
}
问题是,只有最后一个图像被交付

为什么会发生这种情况??我错过了什么?如何解决这个问题


提前感谢。

这是一个如何使用MultipartFormDataContent向HTTPClient发布字符串和文件流的示例。需要为每个HTTPContent指定内容配置和内容类型:

这是我的例子。希望有帮助:

var path=@“C:\B2BAssetRoot\files\596086\596086.1.mp4”

使用(var-client=new-HttpClient())
{
client.DefaultRequestHeaders.Add(“用户代理”,“CBS Brightcove API服务”);
使用(var content=new MultipartFormDataContent())
{
字符串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();
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("User-Agent", "CBS Brightcove API Service");

            using (var content = new MultipartFormDataContent())
            {
                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();