2013-04-28 83 views
1

即時通訊嘗試開發使用Imgur api上傳圖像的C#應用​​程序。上傳圖像到imgur原因: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(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(); 
} 

如果IM上傳小圖片(20KB)一切工作正常。 ,但當im uploding更大的圖像(500kb)時出現錯誤: URI無效:Uri字符串太長。

我該怎麼辦?

回答

1

我成功通過劃分的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(); 
} 

感謝所有。

1

它們的工作方式是將圖像轉換爲如下形式:System.Convert.ToBase64String(imageData) 將其添加到URI併發送到服務器以解碼回圖像。

您將無法使用單個URI解決此問題,因爲它是imgur設計中固有的。

閱讀本作的最大長度的URI可以是:What is the maximum length of a URL in different browsers?

+0

你說得對。但我找到了一種方法來避開並使之成爲可能。謝謝! – 2013-04-28 22:02:54