[英]Invalid URI: The Uri string is too long using Imgur API
我正在使用imgur API上传图像,但是在此行出现异常:
string uploadRequestString = "image=" + Uri.EscapeDataString(Convert.ToBase64String(imageData)) + "&key=" + apiKey;
无效的URI:Uri字符串太长。
完整代码:
public static string PostToImgur(string imagFilePath, string apiKey)
{
byte[] imageData;
FileStream fileStream = File.OpenRead(imagFilePath);
imageData = new byte[fileStream.Length];
fileStream.Read(imageData, 0, imageData.Length);
fileStream.Close();
string uploadRequestString = "image=" + Uri.EscapeDataString(Convert.ToBase64String(imageData)) + "&key=" + apiKey;
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://api.imgur.com/2/upload");
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.ServicePoint.Expect100Continue = false;
StreamWriter streamWriter = new StreamWriter(webRequest.GetRequestStream());
streamWriter.Write(uploadRequestString);
streamWriter.Close();
WebResponse response = webRequest.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader responseReader = new StreamReader(responseStream);
string responseString = responseReader.ReadToEnd();
XmlDocument doc = new XmlDocument();
doc.InnerXml = responseString;
XmlElement root = doc.DocumentElement;
responseString = root.GetElementsByTagName("original")[0].InnerText;
return responseString;
}
它适用于较小的文件,但在较大的文件上会出现该错误。
我怀疑System.Convert.ToBase64String(imageData)
的输出太长,无法成为大约2000个字符的有效URI(我认为是2048)。
这将与图像的大小有关,因为可以将较小的图像编码为较短的字符串。
您将无法绕过此限制。
使用较短的URL。 每个规范的URLL受到限制,并且上传二进制数据将超出此长度。
没有人做-通常数据是作为表单请求变量附加的,而不是URL的一部分。
“ image =” + Uri.EscapeDataString(System.Convert.ToBase64String(imageData))
不管用。 您不能有多个兆字节URL。
有讨论。 结论是最大长度约为2000个字符。
无论如何,将图像放入请求有效负载(而不是url)的一部分中的变量。
FileStream fileStream = File.OpenRead(imagFilePath);
imageData = new byte[fileStream.Length];
fileStream.Read(imageData, 0, imageData.Length);
fileStream.Close();
RestClient client = new RestClient("https://api.imgur.com/3/image");
RestRequest request = new RestRequest()
{
Method = Method.POST,
};
request.AddHeader("Authorization", "YOUR Client-ID");
request.AddParameter("image", Convert.ToBase64String(imageData), ParameterType.RequestBody);
IRestResponse restResponse = client.Execute(request);
如果可能,您可以使用PUT请求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.