【问题标题】:Can not understand POST request Format无法理解 POST 请求格式
【发布时间】:2015-12-04 10:43:00
【问题描述】:

这些是本文https://developer.amazon.com/public/apis/experience/cloud-drive/content/nodes中的行

我想用这个解释上传视频

上传文件 上传文件内容及其元数据信息。

POST : {{contentUrl}}/nodes?suppress={suppress}

抑制:(可选)

重复数据删除:上传时禁用重复检查 机身参数:

多格式部分

--------- 元数据 ------------

name(必需):文件名。最多 256 个字符。 种类(必填):“文件” 标签(可选):被索引的额外信息。例如,该值可以是“PHOTO” properties(可选):要为文件添加的属性列表。 parents(optional) : 父 ID 列表。如果未提供父文件夹,则文件将放置在默认根文件夹中。 ---------内容------------

文件字节

样品请求:

POST /cdproxy/nodes?localId=testPhoto HTTP/1.1 主机:content-na.drive.amazonaws.com 授权:承载 Atza|IQEBLjAsAhReYeezFcFdYzqrFOJGv3EG

----WebKitFormBoundaryE19zNvXGzXaLvS5C 内容处置:表单数据;名称="元数据"

{"name":"fooo.jpg","kind":"FILE"} ----WebKitFormBoundaryE19zNvXGzXaLvS5C 内容处置:表单数据;名称=“内容”; 文件名="db5df4870e4e4b6cbf42727fd434701a.jpg" 内容类型:image/jpeg

----WebKitFormBoundaryE19zNvXGzXaLvS5C

cURL 请求:

curl -v -X POST --form 'metadata={"name":"testVideo1","kind":"FILE"}' --form '内容=@sample_iTunes.mp4' 'https://content-na.drive.amazonaws.com/cdproxy/nodes?localId=testVideo1&suppress=deduplication' --header "授权:承载 Atza|IQEBLjAsAhQ5zx7pKp9PCgCy6T1JkQjHHOEzpwIUQM"

我在 C# 中编写了以下代码 //FileName 1: 来自计算机的文件 //FileName 2:要在亚马逊云上命名的文件。

   if (AccessCode == null)
        {
            return ;
        }
        WebRequest request =                 WebRequest.Create(EndPointUrl+"//+&suppress=deduplication'");
        request.Method = "POST";
        string code = "Bearer " + AccessCode;
        request.Headers.Add("Authorization", code);
        string postData =@"Content-Disposition: form-data; name=""metadata""   {""name"":"""+FileName1+@""",""kind"":""+FILE""}
        Content-Disposition: form-data; name=""content"";
        filename="""+FileName2+@"""
        Content-Type: video/wmv";
        byte[] byteArray = Encoding.UTF8.GetBytes(postData);
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = byteArray.Length;
        Stream dataStream = request.GetRequestStream();
        dataStream.Write(byteArray, 0, byteArray.Length);
        dataStream.Close();
        WebResponse response = request.GetResponse();
        Console.WriteLine(((HttpWebResponse)response).StatusDescription);
        dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);
        string responseFromServer = reader.ReadToEnd();
        Console.WriteLine(responseFromServer);
        reader.Close();
        dataStream.Close();
        response.Close();        

问题是我无法正确翻译。它给出了 404 错误。

{"message":"资源不存在。"}

请帮助我理解它。

【问题讨论】:

  • 它是一个普通的multipart/form-data POST 请求,第一个参数值为Stringified JSON 对象,第二个是图像文件
  • 所以会有两个标题?
  • 不会有两个多部分的请求。我建议您使用 .NET 4.5 及更高版本中提供的新 HttpClient APi。

标签: c# rest webrequest


【解决方案1】:

它是一个普通的multipart/form-data POST 请求,第一个参数值为Stringified JSON 对象,第二个是图像文件。

请看:Upload files with HTTPWebrequest (multipart/form-data)

那么你可以

NameValueCollection nvc = new NameValueCollection();
nvc.Add("metadata", "{\"name\":\"fooo.jpg\",\"kind\":\"FILE\"}");
HttpUploadFile("THE_URL_HERE", @"C:\test\fooo.jpg", "content", "image/jpeg", nvc);

【讨论】:

  • 谢谢,但远程服务器返回 404
  • @Charlie 404 肯定是由于亚马逊的一些技术问题。
猜你喜欢
  • 2016-11-15
  • 1970-01-01
  • 1970-01-01
  • 2022-07-11
  • 2018-03-24
  • 2021-12-11
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
相关资源
最近更新 更多