首页 > 编程语言 >C#将文件以byte[]形式传给python的sanic接口

C#将文件以byte[]形式传给python的sanic接口

时间:2024-07-09 13:32:22浏览次数:14  
标签:字节 stream C# bytes 接口 python sanic byte data

C#如何将文件以byte[]形式传给python的sanic接口?

C#调用的部分你可以按照以下步骤进行:

1)读取文件,将文件转换成byte[];
2)定义类,将byte[]内容转成json格式传输;
3)使用post请求将content传输到接口,返回结果;

C#调用部分代码:

/*将文件转换成byte[]格式*/
protected static byte[] GetFileData(string fileUrl)
{
    using (FileStream fs = new FileStream(fileUrl, FileMode.Open, FileAccess.Read))
    {
        try
        {
            byte[] buffur = new byte[fs.Length];
            fs.Read(buffur, 0, (int)fs.Length);
            return buffur;
        }
        catch (Exception)
        {
            return null;
        }
    }
}

/*传输给接口的类*/
public class RequestData
{
    public byte[] bytes_stream { get; set; }
}

/*调用接口的方法*/
public static async Task<string> Calling_Interface(string fullname, CancellationToken cancellationToken)
{
    var requestData = new RequestData
    {
        bytes_stream = GetFileData(fullname)
    };
    using (var client = new HttpClient())
    {
        client.BaseAddress = *****;
        var jsonContent = JsonConvert.SerializeObject(requestData);
        var content = new StringContent(jsonContent, Encoding.UTF8, "application/json");
        try
        {
            HttpResponseMessage response = await client.PostAsync("/api/jiekouName", content, cancellationToken);
            if (response.IsSuccessStatusCode)
            {
                  string resultJson = await response.Content.ReadAsStringAsync();
                  /*做一些处理*/
                  return ****;
            }
            return null;
        }
        catch (Exception ex)
        {
            throw ex.GetOriginalException();
        }
    }
}

2.python接口部分

在你的Sanic应用中,你接收到了一个byte[]数据,但是在处理过程中它被转换成了字符串。为了将这个字符串重新转换回字节流,你可以按照以下步骤进行:

1)从JSON中提取字符串:data['bytes_stream']是一个字符串。
2)将字符串解码回字节:将字符串视为Base64编码的字节数据。
3)将Base64字符串解码为字节:使用Python的base64模块的b64decode函数。
4)创建字节流:使用BytesIO类将字节数据包装成可读写的流。

具体代码如下:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-

from sanic import Sanic, json
import io
import base64

app = Sanic("CodeAPI")
HOST = "localhost"
PORT = 8080

@app.post('/api/jiekouName')
async def jiekou_Name(request):
    data = request.json
    base64_bytes = data['bytes_stream'].encode('ascii')
    bytes_data = base64.b64decode(base64_bytes)
    stream_data = io.BytesIO(bytes_data)
    stream_data.seek(0)
    # 处理文件,并返回结果的逻辑
    result = *****
    return json(result)

if __name__ == "__main__":
    app.run(host=HOST, port=PORT, debug=False, single_process=False)

 

标签:字节,stream,C#,bytes,接口,python,sanic,byte,data
From: https://www.cnblogs.com/yellow3gold/p/18291600

相关文章

  • @Autowired和@Resource有哪些区别
    一、注解的作用@Autowired和@Resource都是用来实现Bean的自动注入功能。二、@Autowired和@Resource的区别1、所属的包不同@Autowired是Spring的注解。@Resource是JSR-250的注解。IDEA有时候会在@Autowired注解上面提示Fieldinjectionisnotrecommended(字段注入是......
  • Linux常用命令-curl
    CURL是一个强大的命令行工具,用于在终端中与网络资源进行交互,支持多种协议和定制选项,非常适合开发者和系统管理员进行网络调试和数据传输操作。基本用法发送GET请求:curlhttp://example.com向http://example.com发送一个简单的GET请求,并输出响应内容到标准输出。保......
  • Exchange被黑客利用做中继外发垃圾邮件问题分析
    近期有用户反馈有大量非本域的邮件从自家服务器发出,还成功投递出来了,不过不用担心,到我们服务商这边被识破,全部拦截下来。以下是用户自建服务器发出的垃圾邮件案例:以上信息只有ip是用户自建服务器的,发件人和邮件都非用户本人发送,可以看出域名都可以通过客户的服务器中继出来发送......
  • Echarts:渲染成Canvas还是SVG,该如何抉择?
    ECharts从初始一直使用Canvas绘制图表。而EChartsv4.0发布了SVG渲染器,从而提供了一种新的选择。在初始化图表实例时,只需设置renderer参数为'canvas'或'svg'即可指定渲染器,比较方便。贝格前端工场带领大家看下如何选择。一、Canvas和SVG的区分Canvas和SVG都是......
  • 前端画图引擎ZRender,echarts的渲染器,你知道吗?
    Zrender是一个轻量级的Canvas和SVG渲染库,它提供了一个高性能的图形绘制和交互的解决方案,用于在Web页面上创建丰富的数据可视化和交互式图形。可能大部分小伙伴不知道这个类库,本文给大家科普一下。一、Zrender是谁?该项目由EFE团队开发而来,项目托管在GitHub上。Zrender基于HT......
  • 基于eBPF的procstat软件追踪等待锁和持有锁的时间
    在并发编程中,锁的使用是保证线程安全的重要手段。然而,过度使用锁或者锁竞争可能导致性能瓶颈。为了分析程序中锁的使用情况,我们可以借助procstat软件来追踪程序加锁时间和等待锁的时间。procstat是一个基于eBPF(extendedBerkeleyPacketFilter)的软件,能够对系统的各种行为进......
  • 【C语言】指针(3):探索-不同类型指针变量
    目录一、字符指针变量二、数组指针变量三、二维数组传参的本质四、函数指针变量4.1函数指针变量4.2函数指针变量的使用4.3函数指针变量的拓展五、函数指针数组六、转移表的应用通过深入理解指针(1)和深入理解指针(2),我们对指针有了一个初步的了解,学会了一级指针、二......
  • [1027] Convert the .py file to the .exe file without opening the Command Line Wi
    ref:Howtoremoveblackscreen(pythonconsole?)withPyQt5executable"C:\Users\User\AppData\Local\Programs\Python\Python311\Scripts\pyinstaller.exe"pipinstallpyinstallerpyinstaller--noconsole--onefilexyz1234.pyAh,PyIn......
  • 1.1 DevOps、CI、CD都是什么?
     DevOpsDevOps是Development和Operations的组合,是一种方法论,是一组过程、方法与系统的统称,用于促进应用开发、应用运维和质量保障(QA)部门之间的沟通、协作与整合。以期打破传统开发和运营之间的壁垒和鸿沟。DevOps是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间......
  • 挂 CSDN,老问题了,现在开始盗我源码不管了
    挂CSDN,老问题了,现在开始盗我源码不管了,希望没有倒霉蛋来买,买了也别找我,我不维护这个项目了!挂壁链接:https://download.csdn.net/download/weixin_44087733/89352970之前盗我文章,把我内置保护链接去掉,嵌广告事,我不挂你名不解决。好,挂出来好使了,我也没追究啥。现在轮到我源码了,虽......