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


欢迎加群交流技术

前言
添加一个新的gRPC项目
添加一个服务,需要添加一个中间件
- endpoints.MapGrpcService<服务名>();
客户端部分
客户端设置一个提交图片的按钮
- //js部分
- $(function () {
- $("#sub").click(function myfunction() {
- var files = $('#file').prop('files');
-
- var data = new FormData();
- data.append('avatar', files[0]);
-
- let reader = new FileReader();
- let file = files[0];
-
- //取出来文件的后缀名(方便在后台保存的时候用)
- var index = file.name.lastIndexOf(".");
- var fileExt = file.name.substr(index + 1);
- console.log(fileExt);
-
- reader.readAsDataURL(file);
- reader.onload = function () {
- console.log(reader.result);
- $.post('/Home/Upimg', { filecontent: reader.result, fileExt: fileExt }, function (result) {
- });
- }
- })
- })
-
- //前台部分
- <form method="post" action="/Home/Upimg" enctype="multipart/form-data">
- <input name="file" id="file" type="file" />
- <input type="button" id="sub" value="提交" />
- </form>
客户端后台设置请求gRPC服务器
客户端中加入gRPC依赖
- <ItemGroup>
- <PackageReference Include="Google.Protobuf" Version="3.11.2" />
- <PackageReference Include="Grpc.Net.Client" Version="2.26.0" />
- <PackageReference Include="Grpc.Tools" Version="2.26.0">
- <PrivateAssets>all</PrivateAssets>
- <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
- </PackageReference>
- </ItemGroup>
调用本地gRPC服务
调用服务的项目需要有一个与服务一模一样的gRPC原生(需要调用的保持一致即可)
后台处理
- //将图片解析成base64编码
- public IActionResult Upimg(string filecontent,string fileExt)
- {
-
- #region base64需要把前面的申明去掉(当然前缀这个也可以放在前端处理)
- //string newbase = base64.Replace("data:image/jpeg;base64,", "");
- //这里用了一下正则表达式因为可能是格式data:image/jpeg;base64,data:image/png;base64等等
- string base64img = Regex.Replace(filecontent, "data:image/.*;base64,", "");
- #endregion
-
- //设置允许不安全的HTTP2支持
- AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
- var channel = GrpcChannel.ForAddress("http://localhost:5001/");
- var client = new UpImg.UpImgClient(channel);
- //传递图片信息与后缀
- var reply = client.UpLond(new UpImgRequest { Img = base64img, FileExt = fileExt });
- string ss = reply.Message;
-
- return View();
- }
服务器部分
gRPC服务器
访问服务器时,将请求中传递的参数解析成图片
- public override Task<UpImgReply> UpLond(UpImgRequest request,ServerCallContext context)
- {
- //调用base64的工具类实现图片上传
-
- string base64img = request.Img;
- string fileExt = request.FileExt;
-
- //把图片存储到d盘,具体操作的时候位置可以自行改变
- Base64ToFileAndSave(base64img, "d://" + Guid.NewGuid().ToString().Replace("-", "") + "." + fileExt);
-
- return Task.FromResult(new UpImgReply
- {
- Message = "上传成功!"
- });
- }
-
- //将图片存储到指定路径的方法
- public static bool Base64ToFileAndSave(string strInput, string fileName)
- {
- bool bTrue = false;
-
- try
- {
- byte[] buffer = Convert.FromBase64String(strInput);
- FileStream fs = new FileStream(fileName, FileMode.CreateNew);
- fs.Write(buffer, 0, buffer.Length);
- fs.Close();
- bTrue = true;
- }
- catch (Exception ex)
- {
- throw ex;
- }
-
- return bTrue;
- }
最后图片就上传到指定的路径里了
评价