Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#HttpClient 4.5多部分/表单数据上传_C#_Upload_.net 4.5_Multipartform Data_Dotnet Httpclient - Fatal编程技术网

C#HttpClient 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)

有人知道如何将.Net 4.5中的
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);
}