菜的像徐坤
排名
7
文章
192
粉丝
15
评论
16
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

gRPC 跨项目传图片

5295人阅读 2021/6/11 16:39 总访问:962326 评论:0 收藏:0 手机
分类: API

前言

添加一个新的gRPC项目

添加一个服务,需要添加一个中间件

  1.  endpoints.MapGrpcService<服务名>();

客户端部分

客户端设置一个提交图片的按钮

  1.  //js部分
  2.   $(function ({
  3.         $("#sub").click(function myfunction({
  4.             var files = $('#file').prop('files');
  5.             var data = new FormData();
  6.             data.append('avatar', files[0]);
  7.             let reader = new FileReader();
  8.             let file = files[0];
  9.             //取出来文件的后缀名(方便在后台保存的时候用)
  10.             var index = file.name.lastIndexOf(".");
  11.             var fileExt = file.name.substr(index + 1);
  12.             console.log(fileExt);
  13.             reader.readAsDataURL(file);
  14.             reader.onload = function ({
  15.                 console.log(reader.result);
  16.                 $.post('/Home/Upimg', { filecontent: reader.result, fileExt: fileExt }, function (result{
  17.                 });
  18.             }
  19.         })
  20.     })
  21.     
  22.     //前台部分
  23.       <form method="post" action="/Home/Upimg" enctype="multipart/form-data">
  24.         <input name="file" id="file" type="file" />
  25.         <input type="button" id="sub"  value="提交" />
  26.       </form>

客户端后台设置请求gRPC服务器

客户端中加入gRPC依赖

  1. <ItemGroup>
  2. <PackageReference Include="Google.Protobuf" Version="3.11.2" />
  3. <PackageReference Include="Grpc.Net.Client" Version="2.26.0" />
  4. <PackageReference Include="Grpc.Tools" Version="2.26.0">
  5. <PrivateAssets>all</PrivateAssets>
  6. <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
  7. </PackageReference>
  8. </ItemGroup>

调用本地gRPC服务
调用服务的项目需要有一个与服务一模一样的gRPC原生(需要调用的保持一致即可)

后台处理

  1.  //将图片解析成base64编码
  2.  public IActionResult Upimg(string filecontent,string fileExt)
  3.         {
  4.            
  5.             #region base64需要把前面的申明去掉(当然前缀这个也可以放在前端处理)
  6.             //string newbase = base64.Replace("data:image/jpeg;base64,", "");
  7.             //这里用了一下正则表达式因为可能是格式data:image/jpeg;base64,data:image/png;base64等等
  8.             string base64img = Regex.Replace(filecontent, "data:image/.*;base64,""");
  9.             #endregion
  10.             //设置允许不安全的HTTP2支持
  11.             AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport"true);
  12.             var channel = GrpcChannel.ForAddress("http://localhost:5001/");
  13.             var client = new UpImg.UpImgClient(channel);
  14.             //传递图片信息与后缀
  15.             var reply = client.UpLond(new UpImgRequest { Img = base64img, FileExt = fileExt });
  16.             string ss = reply.Message;
  17.             return View();
  18.         }

服务器部分

gRPC服务器

访问服务器时,将请求中传递的参数解析成图片

  1.      public override Task<UpImgReply> UpLond(UpImgRequest request,ServerCallContext context)
  2.         {
  3.             //调用base64的工具类实现图片上传
  4.             string base64img = request.Img;
  5.             string fileExt = request.FileExt;
  6.             //把图片存储到d盘,具体操作的时候位置可以自行改变
  7.             Base64ToFileAndSave(base64img, "d://" + Guid.NewGuid().ToString().Replace("-""") + "." + fileExt);
  8.             return Task.FromResult(new UpImgReply
  9.             {
  10.                 Message = "上传成功!"
  11.             });
  12.          }
  13.          
  14.          //将图片存储到指定路径的方法
  15.          public static bool Base64ToFileAndSave(string strInput, string fileName)
  16.         {
  17.             bool bTrue = false;
  18.             try
  19.             {
  20.                 byte[] buffer = Convert.FromBase64String(strInput);
  21.                 FileStream fs = new FileStream(fileName, FileMode.CreateNew);
  22.                 fs.Write(buffer, 0, buffer.Length);
  23.                 fs.Close();
  24.                 bTrue = true;
  25.             }
  26.             catch (Exception ex)
  27.             {
  28.                 throw ex;
  29.             }
  30.             return bTrue;
  31.         }

最后图片就上传到指定的路径里了

评价

gRPC 四种服务类型介绍

gRPC 有四种服务类型分别是:简单 RPC(Unary RPC)、服务端流式 RPC (Server streaming RPC)、客户端流式 RPC (Client ...

启动gRPC报错:HTTP/2 over TLS is not supported on Windows 7

.net core grpc报错:NotSupportedException: HTTP/2 over TLS is not supported on Windows 7 due to missing ALPN suppor...

.net core 3.0 gRPC自定义服务

服务器端新建gRPC项目右键Protos文件夹--&gt;新建一个.proto,选择协议缓冲区文件,用于描述gRPC的消息和服务名字随便取,...

.net core发布gRPC项目和远程调用

发布gRPC项目的过程和其他项目一样,右键发布即可发布出来后会看到有个.exe的程序然后直接丢到服务器双击运行即可不放到iis...

.net core gRPC base64上传图片文件

客户端前台&lt;div&gt; &lt;inputtype=&quot;file&quot;onchange=&quot;selectImage(this.files)&quot;accept=&quot;&quot...

.net core重写gRPC的方法

第一步F12定义看继承的类里边把里边的方法复制出来把前缀删除一下,前缀太多了不太好看删除掉加个override即可,就可以很方...

gRPC报错gRPC - Unimplemented service

注意新建了服务需要在服务器注册,不然会报gRPC-gRPC-Unimplementedservice注意:并不是代码不报错就说明接口被启动的,因为...

gRPC客户端流requestStream.Current为空的问题

gRPC客户端流requestStream.Current为空的问题流式传输不能直接获取,这样requestStream.Current会为空比如这里我们传递文...

gRPC客户端流式传递多个参数

客户端流式中,想要获取数据先要执行MoveNext一下或者获取到的对象是空的,但是有些时候现在在这之前就传递参数了可以借用M...

.net core gRPC 客户端流式上传图片,文件。gRPC文件分段传输

html前台,完全一样:&lt;formmethod=&quot;post&quot;action=&quot;/home/UpLoadImgStream&quot;enctype=&quot;multipart/f...

发布.net core的gRPC服务

发布.net core的grpc服务,很简单。把发布的文件复制到服务器后,不需要放到iis上面去了,只需要运行那个.exe文件即可

gRPC简介

gRPC简介gRPC gRPC来自 Google,它是一个开源的框架;它同时也是 Cloud Native Computation基金会(CNCF的一部分,就像 Docker...

gRPC Protocol Buffer 消息定义

标量类型gRPC  数值型有很多种形式: double, foat, fint32, int64, uint32, uint64, sint32, sint64, fixed32, fixed 64, ...

.NetCore 3.x 与 gRPC

目录 本篇文章主要讲解如下内容 一。grpc在 .Net Core 3.x 中的应用 二。grpc如何分段上传图片 代码与实现过程比较简单,...

gRPC 在vs中的运用与proto同步

思 考 问 题 grpc 服务器当对 proto 文件进行修改时每次都去 Copy 到本地 Client 是比较麻烦的,有没有快捷的方法解决?Gr...

gRPC调用由于目标计算机积极拒绝,无法连接。

修改端口设置,可能是https造成的代码:publicstaticIHostBuilderCreateHostBuilder(string[]args)=&gt; Host.CreateDefau...