【问题标题】:Uploading image to imgur causes: The Uri string is too long上传图片到imgur原因:Uri字符串太长
【发布时间】:2013-04-22 11:16:58
【问题描述】:

我正在尝试开发使用 Imgur api 上传图像的 C# 应用程序。

这是我的上传功能:

    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(System.Convert.ToBase64String(imageData)) + "&key=" + apiKey;

    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("https://api.imgur.com/3/image");
    webRequest.Method = "POST";
    webRequest.ContentType = "application/x-www-form-urlencoded";
    webRequest.ServicePoint.Expect100Continue = false;
    webRequest.Headers["Authorization"] = "Client-ID abd937cc5e11dc9";

    StreamWriter streamWriter = new StreamWriter(webRequest.GetRequestStream());
    streamWriter.Write(uploadRequestString);
    streamWriter.Close();

    WebResponse response = webRequest.GetResponse();
    Stream responseStream = response.GetResponseStream();
    StreamReader responseReader = new StreamReader(responseStream);

    return responseReader.ReadToEnd();
}

如果我上传小图片 (20kb) 一切正常。 但是当我上传更大的图像(500kb)时,我得到了错误: URI 无效:Uri 字符串太长。

我能做什么?

【问题讨论】:

    标签: c# http imgur


    【解决方案1】:

    他们的工作方式是图像转换如下:System.Convert.ToBase64String(imageData) 将其添加到 URI 并发送到服务器以解码回图像。

    您将无法使用单个 URI 解决此问题,因为它是 imgur 设计中固有的。

    阅读此内容以了解 URI 的最大长度:What is the maximum length of a URL in different browsers?

    【讨论】:

    • 你说得对。但我找到了一种解决方法并使其成为可能。谢谢!
    【解决方案2】:

    我通过base64字符串分割成功上传大图

    这是工作代码:

        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();
    
        const int MAX_URI_LENGTH = 32766;
        string base64img = System.Convert.ToBase64String(imageData);
        StringBuilder sb = new StringBuilder();
    
        for (int i = 0; i < base64img.Length; i += MAX_URI_LENGTH)
        {
            sb.Append(Uri.EscapeDataString(base64img.Substring(i, Math.Min(MAX_URI_LENGTH, base64img.Length - i))));
        }
    
        string uploadRequestString = "key=" + apiKey + "&title=" + "imageTitle" +
            "&caption=" + "img" + "&image=" + sb.ToString();
    
       // string uploadRequestString = "image=" + Uri.EscapeDataString(System.Convert.ToBase64String(imageData)) + "&key=" + apiKey;
    
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("https://api.imgur.com/3/image");
        webRequest.Method = "POST";
        webRequest.ContentType = "application/x-www-form-urlencoded";
        webRequest.ServicePoint.Expect100Continue = false;
        webRequest.Headers["Authorization"] = "Client-ID abd937cc5e11dc9";
    
        StreamWriter streamWriter = new StreamWriter(webRequest.GetRequestStream());
        streamWriter.Write(uploadRequestString);
        streamWriter.Close();
    
        WebResponse response = webRequest.GetResponse();
        Stream responseStream = response.GetResponseStream();
        StreamReader responseReader = new StreamReader(responseStream);
    
        return responseReader.ReadToEnd();
    }
    

    谢谢大家。

    【讨论】:

      猜你喜欢
      • 2012-03-04
      • 2014-05-09
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      • 1970-01-01
      • 2013-04-23
      • 2016-10-25
      相关资源
      最近更新 更多