在 C# WP8.1 项目中使用 Catchoom

Posted

技术标签:

【中文标题】在 C# WP8.1 项目中使用 Catchoom【英文标题】:Using Catchoom in C# WP8.1 project 【发布时间】:2014-07-09 13:26:25 【问题描述】:

我想在 c# 中使用catchoom,但找不到任何示例,如果有,请提供任何示例代码。

我有这个卷曲样本

 curl -F "image=@CATask1-Correct.png" -F "token=sometoken" https://r.catchoom.com/v1/search

有人可以将其转换为 c# 吗? 我尝试将其转换为如下所示:

这是我的代码:

public static async Task<string> Upload(byte[] image)
    
        using (var client = new HttpClient())
        
           // string boundary = "---XXX---";
            using (var content =  new MultipartFormDataContent())
            

                string token = "sometoken";
                MemoryStream stream = new MemoryStream();
                StreamWriter writer = new StreamWriter(stream);
                writer.Write(token);
                writer.Flush();
                stream.Position = 0;

               // adding Token and Image to the request 
                content.Add(new StreamContent(stream), "token");

                content.Add(new StreamContent(new MemoryStream(image)), "bilddatei", "upload.jpg");

                using (

                     var message = await client.PostAsync("https://r.catchoom.com/v1/search", content)) 

                       
                    var input = await message.Content.ReadAsStringAsync();

                    return input;
                
            
        
    

然后我在点击事件处理程序中调用了该方法:

     private async void mybtn_Click(object sender, RoutedEventArgs e)
    

        // converting the image to a byte array
        BitmapImage bitmapImage = new BitmapImage(new Uri("http://www.familyfuntwincities.com/wp-content/uploads/2013/09/apple_red_1_clipart.png?s=128&g=1"));
        RandomAccessStreamReference rasr = RandomAccessStreamReference.CreateFromUri(bitmapImage.UriSource);
        var streamWithContent = await rasr.OpenReadAsync();
        byte[] buffer = new byte[streamWithContent.Size];
        await streamWithContent.ReadAsync(buffer.AsBuffer(), (uint)streamWithContent.Size, InputStreamOptions.None);

 // calling the upload method
        string output = await Upload(buffer);
        mytext1.Text = output;

    

但我不断从 catchoom 服务器收到“图像丢失”错误,尽管我设法以相同的方式将图像上传到其他服务器(当然没有令牌部分)。

我的问题是:如何添加多个部分内容?为了被catchoom识别,令牌部分和图像部分之间的正确边界是什么?

【问题讨论】:

【参考方案1】:

这对我有用:

public static async Task<string> Test(string token, Stream stream, string fileName)

    HttpClient client = new HttpClient();
    MultipartFormDataContent content = new MultipartFormDataContent();
    content.Add(new StringContent(token), "token");
    content.Add(new StreamContent(stream), "image", fileName);
    var resp = await client.PostAsync("https://r.catchoom.com/v1/search", content);
    return await resp.Content.ReadAsStringAsync();

如果您想使用您在示例中列出的图片,我将按照以下方式获取它:

HttpClient client = new HttpClient();
var stream = await client.GetStreamAsync("http://www.familyfuntwincities.com/wp-content/uploads/2013/09/apple_red_1_clipart.png?s=128&g=1");
return await Test("<SOME_TOKEN_VALUE>", stream, "apple.png");

但是,API 声称由于 Alpha 透明度,该图像不受支持。如果这很重要,您可以找到一些其他示例,向您展示如何去除 Alpha 透明度。上面的代码适用于没有 alpha 透明度的图像。

【讨论】:

以上是关于在 C# WP8.1 项目中使用 Catchoom的主要内容,如果未能解决你的问题,请参考以下文章

如何在WP8.1 c#中将广告放置在固定位置

WP8.1 C#代码 添加/获取Grid.ColumnDefinitions/RowDefinitions

Xamarin 中的 WP8.1

VS 2015 - WP8 - “指定的通信资源(端口)已被其他应用程序使用。”

Parse 1.3 与 WP8 的兼容性问题

XAML 页面不是在 Windows 10 Mobile 上的 WinRT 应用程序中收集的垃圾,但在 WP8.1 上按预期工作