在 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#代码 添加/获取Grid.ColumnDefinitions/RowDefinitions
VS 2015 - WP8 - “指定的通信资源(端口)已被其他应用程序使用。”
XAML 页面不是在 Windows 10 Mobile 上的 WinRT 应用程序中收集的垃圾,但在 WP8.1 上按预期工作