0
public sealed class ImgurUpload
{
    public event EventHandler<UploadCompleteEventArgs> UploadComplete;

    public void PostToImgur(string location, string key, string name = "", string caption = "")
    {
        try
        {
            using (var webClient = new WebClient())
            {
                NameValueCollection values = new NameValueCollection
                {
                    { "image", ConvertToBase64(location) },
                    { "key", key },
                    { "name", name },
                    { "caption", caption}
                };
                webClient.UploadValuesAsync(new Uri("http://api.imgur.com/2/upload.xml"), "POST", values);
                webClient.UploadValuesCompleted += ((sender, eventArgs) =>
                {
                    byte[] response = eventArgs.Result;
                    XDocument result = XDocument.Load(XmlReader.Create(new MemoryStream(response)));
                    if (UploadComplete != null)
                        UploadComplete(this, new UploadCompleteEventArgs(result));
                });
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);  
        }
    }

    private string ConvertToBase64(string imageLocation)
    {
        byte[] imageData = null;
        using (FileStream fileStream = File.OpenRead(imageLocation))
        {
            imageData = new byte[fileStream.Length];
            fileStream.Read(imageData, 0, imageData.Length);
        }
        return Convert.ToBase64String(imageData);
    }
}

public class UploadCompleteEventArgs : EventArgs
{
    public string Original { get; private set; }
    public string ImgurPage { get; private set; }
    public string DeletePage { get; private set; }

    public UploadCompleteEventArgs(XDocument xmlDoc)
    {
        var objLinks = from links in xmlDoc.Descendants("links")
                       select new
                       {
                           original = links.Element("original").Value,
                           imgurPage = links.Element("imgur_page").Value,
                           deletePage = links.Element("delete_page").Value
                       };

        Original = objLinks.FirstOrDefault().original;
        ImgurPage = objLinks.FirstOrDefault().imgurPage;
        DeletePage = objLinks.FirstOrDefault().deletePage;
    }
}

上記は、 Anonymous APIを使用して画像を imgur にアップロードするために作成したクラスです。私は過去に API を使用したことがあり、ウェブサイトのアップローダよりもかなり遅く、API を使用するのではなく、ウェブ リクエストを使用してデータをウェブサイトに効果的に直接送信する他の .NET アプリケーションよりも遅いことが常にわかりました。

問題の原因となっているのは、私が行っている (またはしていない) ことである可能性があるため、上記の完全なクラスを投稿しました。誰かが私のために問題を特定できれば、本当に感謝しています。

今日の初めにいくつかの公正なテストを行いました。たとえば、次のような結果が得られます。

  • imgurウェブサイト経由の 800kb 画像= 35 秒
  • 私のクラスを使用した 800kb の画像= 1 分 20 秒
4

1 に答える 1

1

アップロードしているものは、STRING としてアップロードしているため、最大 35% 大きくなっています。

バイト経由でアップロードすると、同じくらい高速になるはずです。

于 2012-11-22T06:16:49.930 に答える