0

画像をアップロードするためにimgurAPIを使用していますが、次の行で例外が発生しています。

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;
}

小さいサイズのファイルでは機能しますが、大きいファイルではそのエラーが発生します。

4

4 に答える 4

2

からの出力System.Convert.ToBase64String(imageData)が長すぎて、約2000文字の有効なURI(2048だと思います)にはならないのではないかと思います。

これは、小さい画像を短い文字列にエンコードできるため、画像のサイズに関連します。

この制限を回避することはできません。

于 2012-02-13T09:24:35.213 に答える
2

短いURLを使用してください。仕様ごとのURLLは制限されており、バイナリデータをアップロードするとこの長さになります。

誰もそれをしません-通常、データはフォームリクエスト変数として添付され、URLの一部ではありません。

"image =" + Uri.EscapeDataString(System.Convert.ToBase64String(imageData))

動作しないでしょう。マルチメガバイURLを持つことはできません。

さまざまなブラウザでのURLの最大長はどれくらいですか?

議論があります。結論として、最大長は約2000文字です。

とにかく、URLではなくリクエストペイロードの一部である変数に画像を入れてください。

于 2012-02-13T09:24:42.310 に答える
0

可能であれば、PUT リクエストを使用できます。

于 2012-02-13T09:25:54.260 に答える
0

http://restsharp.org/で簡単

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);
于 2013-03-15T13:42:10.597 に答える