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)