c# winform 通过Base64传本地图片到java服务器

本文记录了作者在C# Winform应用中通过Base64编码将本地图片上传至Java服务器的过程。在实现过程中遇到了图片无法正常显示的问题,经过分析发现是Java服务器端接收到的Base64字符串中“+”被替换为了“ ”。通过在服务器端使用`str.replace(" ", "+")`解决了这个问题,成功实现了图片上传。" 115937667,10549174,使用Matlab的蒙特卡洛法解决整数规划问题,"['Matlab', '整数规划', '蒙特卡洛法', '优化算法', '数值计算']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  最在在做毕业设计,需要用到winform传电脑上的图片到服务器上,于是又是一下午的从零开始研究,好在之前有点android传到java服务器的经验。

  在一阵百度过后最终成功的将图片传到了服务器,这里来记录一下琢磨过程和遇到的问题。


 首先我找到了这篇博客点击打开链接 但是他不是讲图片传到java服务器,于是我只因用了一些

先在winform把布局弄好大概就是这样,点击“选择照片”就从本地读取到这个pictureBox上来,然后点击“上传”就传到服务器。

先来看  选择照片  到 显示出来的过程

public  String ShowPic(PictureBox picBox)
        {
            string picAddress=null;
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.InitialDirectory = @"E:\";
            ofd.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files(*.*)|*.*";
            ofd.RestoreDirectory = true;

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                picAddress = ofd.FileName;
                Image i
### 实现微信支付集成 为了在C# WinForms应用程序中实现微信支付功能,通常需要通过调用微信官方提供的API接口来完成支付流程。此过程涉及服务器端和客户端两部分的工作。 #### 服务端准备 首先,在服务器上部署一套能够处理来自微信支付平台请求的服务程序。该服务负责接收并解析来自微信的通知消息,验证签名合法性以及向微信发送响应数据包等操作。这部分工作一般采用PHP、Java或其他支持HTTPS协议的语言编写[^1]。 对于.NET环境下的开发者来说,可以考虑使用ASP.NET Core框架搭建RESTful Web API作为中间层,专门用于对接微信支付接口。具体步骤如下: - 注册成为微信开放平台开发者账号,并申请开通商户号; - 下载最新的微信支付SDK(推荐使用官方提供的NuGet包); - 编写控制器方法以接受前端来的订单详情,并据此构造预付单请求提交给微信支付网关; ```csharp using Microsoft.AspNetCore.Mvc; using WeChatPaySharp; public class PayController : ControllerBase { private readonly IWechatPayClient _client; public PayController(IWechatPayClient client){ _client = client; } [HttpPost("/pay/unifiedorder")] public async Task<IActionResult> UnifiedOrder([FromBody] OrderModel order){ var response = await _client.UnifiedOrderAsync(new UnifiedOrderRequest{ Body = "商品描述", OutTradeNo = Guid.NewGuid().ToString(), TotalFee = (int)(order.TotalAmount * 100), // 单位转换成分为单位 SpbillCreateIp = Request.HttpContext.Connection.RemoteIpAddress.ToString(), NotifyUrl = "https://yourdomain.com/api/pay/notify" }); return Ok(response); } } ``` #### 客户端逻辑 当用户点击购买按钮时,WinForms应用应当发起HTTP POST请求至上述Web API获取prepay_id字段值,之后再利用这个id构建JSAPI支付所需的json对象递给WebView控件加载的HTML页面中的JavaScript函数执行实际付款动作。由于WinForms本身并不具备直接展示网页的能力,因此这里建议引入第三方库如`cefsharp`来嵌入Chromium浏览器内核渲染H5页面[^2]。 下面给出一段简化版的示例代码片段展示了如何从本地项目启动CEF窗口并注入必要的js代码触发支付行为: ```csharp // Install-Package CefSharp.WinForms via Nuget Package Manager Console first. using CefSharp; using CefSharp.WinForms; private ChromiumWebBrowser browser; protected override void OnLoad(EventArgs e) { base.OnLoad(e); var settings = new CefSettings(); Cef.Initialize(settings); browser = new ChromiumWebBrowser("about:blank"); this.Controls.Add(browser); LoadPaymentPage(); } async void LoadPaymentPage(){ try{ using(var httpClient=new HttpClient()){ HttpResponseMessage resp=await httpClient.PostAsJsonAsync( $"http://{serverAddress}/api/pay/unifiedorder", new{total_amount}); if(resp.IsSuccessStatusCode){ dynamic data=JObject.Parse(await resp.Content.ReadAsStringAsync()); string prepayId=data.prepay_id; string jsCode=$@" function callWXPay(){{ WeixinJSBridge.invoke('getBrandWCPayRequest',{ 'appId':'{data.appId}', ... 'package' :'Sign={prepayId}' },function(res){{});}}; "; browser.LoadHtml($@"<html><body onload='callWXPay()'></body></html>"); browser.ExecuteScriptAsync(jsCode); } } }catch(Exception ex){} } ``` 需要注意的是以上仅为概念性的指导方案,实际开发过程中还需参照最新版本文档调整细节之处。另外考虑到安全性因素,务必妥善保管私钥文件并且严格按照规定设置回调地址白名单防止恶意篡改交易状态通知。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值