以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]如何通过Http直接发送二进制文件流  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=176146)

--  作者:qqzwc
--  发布时间:2022/4/1 14:33:00
--  [求助]如何通过Http直接发送二进制文件流
香参照以下接口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编辑过]

--  作者:有点蓝
--  发布时间:2022/4/1 14:36:00
--  
c#转vb:http://converter.telerik.com/
--  作者:有点蓝
--  发布时间:2022/4/1 14:36:00
--  
如果使用Foxtable的httpclient参考:http://www.foxtable.com/mobilehelp/topics/0161.htm
--  作者:qqzwc
--  发布时间: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)
---------------------------
确定   
---------------------------


--  作者:有点蓝
--  发布时间:2022/4/1 16:27:00
--  
如果1楼的代码是接口官方提供的,转换为vb不可能有问题,有问题就找他们客服。

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


--  作者:qqzwc
--  发布时间: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)