C#将文件传给python的sanic接口

C#如何将文件传给python的sanic接口?

1.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 ct)
{
    var requestData = new RequestData
    {
        bytes_stream = GetFileData(fullname)
    };
    using (var client = new HttpClient())
    {
        client.BaseAddress = "http://localhost:8080/";
        var jsonContent = JsonConvert.SerializeObject(requestData);
        var content = new StringContent(jsonContent, Encoding.UTF8, "application/json");
        try
        {
            var response = await client.PostAsync("/api/jiekouName", content, ct);
            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 = ***** #do something with stream_data
    return json(result)

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

 

posted @ 2024-07-09 13:20  新*  阅读(23)  评论(2编辑  收藏  举报