Foxtable(狐表)用户栏目专家坐堂 → [求助]如何通过Http直接发送二进制文件流


  共有5245人关注过本帖树形打印复制链接

主题:[求助]如何通过Http直接发送二进制文件流

帅哥哟,离线,有人找我吗?
qqzwc
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:162 积分:1145 威望:0 精华:0 注册:2020/2/11 11:42:00
[求助]如何通过Http直接发送二进制文件流  发帖心情 Post By:2022/4/1 14:33:00 [只看该作者]

香参照以下接口Demo说明,读取一个图片为二进制数据,并直接发送,在Foxtable中如何实现?

https://ai.intsig.com/doc/general/sample_code/v1.0

尤其这句话,不知如何实现

POST BODY:待识别的文件二进制流

System.IO.FileStream.Read读取到的内容是Byte()字节数组,可是Foxtable的HttpClient要传输的却是String,如果使用System.Text.Encoding.UTF8.GetString(Byte())或者System.Text.Encoding.ASCII.GetString(Byte())读取到的字符串与十六进制编辑器直接打开看到的数据不一致,因此直接给API结果传过去也会报错,该怎么处理呢?

有大神可以参照C#示例代码,写一个Foxtable版本的代码吗?


using System;
using System.Drawing;
using System.IO;
using System.Net;
namespace AiApi
{
    class Program
    {
        static void Main(string[] args)
        {
            string appKey = "5c6b*****************f4d85"; // your app_key
            string appSecret = "c83e******************6a9e"; // your app_secret
            string url = "https://ocr-api.ccint.com/cci_ai/service/v1/id_card"; // id_card
            var img = GetPictureData("example.jpg");
            using (var client = new WebClient())
            {
                try
                {
                    client.Headers.Add("app-key", appKey);
                    client.Headers.Add("app-secret", appSecret);
                    var response = client.UploadData(url, img);
                    string result= System.Text.Encoding.UTF8.GetString(response);
                    Console.WriteLine(result);
                }
                catch(WebException e)
                {
                    Console.WriteLine(e.Status);
                }
                Console.ReadLine();
            }
        }
        private static byte[] GetPictureData(string imagepath)
        {
            FileStream fs = new FileStream(imagepath, FileMode.Open);
            byte[] byData = new byte[fs.Length];
            fs.Read(byData, 0, byData.Length);
            fs.Close();
            return byData;
        }
    }
}
[此贴子已经被作者于2022/4/1 16:03:06编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/4/1 14:36:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/4/1 14:36:00 [只看该作者]

如果使用Foxtable的httpclient参考:http://www.foxtable.com/mobilehelp/topics/0161.htm

 回到顶部
帅哥哟,离线,有人找我吗?
qqzwc
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:162 积分:1145 威望:0 精华:0 注册:2020/2/11 11:42:00
  发帖心情 Post By:2022/4/1 16:16:00 [只看该作者]

无论System.IO.FileStream.Read方法或者ADO.Stream.Read()方法,读取文件获得的是一个Byte()类型,怎样才能转换成WebClient或者HttpClient要用的String去发送呢?

System.Text.Encoding.UTF8.GetString(Byte())或者System.Text.Encoding.ASCII.GetString(Byte())转换后的内容与WinHex直接看文件十六进制内容不一致,API接收会报错

---------------------------
错误
---------------------------
编译错误:类型“Byte 的 1 维数组”的值无法转换为“String”。


错误代码:Dim ret As String=hc.UploadData(url,byData)
---------------------------
确定   
---------------------------


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/4/1 16:27:00 [只看该作者]

如果1楼的代码是接口官方提供的,转换为vb不可能有问题,有问题就找他们客服。

UploadData返回的是字节流,不是字符串。UploadData返回的也不是文件,而是接口接收后反馈的结果


 回到顶部
帅哥哟,离线,有人找我吗?
qqzwc
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:162 积分:1145 威望:0 精华:0 注册:2020/2/11 11:42:00
  发帖心情 Post By:2022/4/1 16:37:00 [只看该作者]

感谢您的耐心指导,明白了!UploadData返回的是字节流,已解决!

Dim hc As New System.Net.WebClient
Dim response As Byte()= hc.UploadData(url, picbytes)
Dim ret As String = System.Text.Encoding.UTF8.GetString(response)

 回到顶部