关于winform上传图片到Java后端,保存到数据库,有多种方法,本文主要介绍利用picturebox控件,点击按钮上传图片,将图片转化为base64格式,以json格式上传到Java后台,再从java端解析,保存到数据库。

上代码:

首先,画面上添加一个picturebox控件,再添加一个button,给button设置click事件-获取到base64格式的字符串。

/// <summary>
/// 图片上传
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnUploadImage_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
//PictureBox控件显示图片
picExpPic.Load(openFileDialog.FileName);
//获取用户选择文件的后缀名
string extension = Path.GetExtension(openFileDialog.FileName);
//声明允许的后缀名
string[] str = new string[] { ".gif", ".jpeg", ".jpg", ".png", ".bmp" };
if (!str.Contains(extension))
{
MessageBox.Show("仅能上传gif,jpge,jpg,png,bmp格式的图片!");
}
else
{
Image img = this.picExpPic.Image;
MemoryStream ms = new MemoryStream();
img.Save(ms, img.RawFormat);
byte[] bytes = ms.ToArray();
ms.Close();
string strbaser64 = Convert.ToBase64String(bytes);
imgStr = "data:image/jpg;base64," + strbaser64;
}
}
}

把字符串imgStr拼接成json格式,上传。c#链接Java后台代码,后续给出。

java后台接收json:

/**
* 新增信息
* @return
*/
@RequestMapping(value="/addInfo")
@ResponseBody
public Result addInfo(String strJson,HttpServletRequest request){
JSONObject object = new JSONObject(strJson);
String base64 = object.getString("Expertpic");
//转为file格式---获取图片信息
MultipartFile fileExpPic = base64ToMultipart(base64);
Result result = new Result();
int ret = 0;
//格式化字符串
String base = base64.replace(" ", "+");
//去掉头部
String[] baseStrs = base.split(",");
BASE64Decoder decoder = new sun.misc.BASE64Decoder();
byte[] bytes1;
String filePath2 = null;
String fileName2 = null;
try {
filePath2 = request.getServletContext().getRealPath("resources\\\\uploads")+"\\";
fileName2 = "expertpic"+sdf.format(dt)+"."+(fileExpPic).getOriginalFilename().substring((fileExpPic).getOriginalFilename().lastIndexOf(".")+1);
//转化为文件流
bytes1 = decoder.decodeBuffer(baseStrs[1]);
//生成jpeg图片
String imgFilePath = filePath2+fileName2;//新生成的图片
OutputStream out = new FileOutputStream(imgFilePath);
out.write(bytes1);
out.flush();
out.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
File dir = new File(filePath2);
if(!dir.exists()) {
dir.mkdirs();
}
try {
A a=new A();
a.temp="";
ret =this.addService.addInfo(a);
if(ret==0) {
result.setSuccess(false);
result.setErrMsg("失败!");
}else {
result.setSuccess(true);
}
} catch (Exception e) {
result.setSuccess(false);
result.setErrMsg("失败!");
}
return result;
}

java base64转化为File方法:

public static MultipartFile base64ToMultipart(String base64) {
try {
String base = base64.replace(" ", "+");
String[] baseStrs = base.split(",");
BASE64Decoder decoder = new sun.misc.BASE64Decoder();
byte[] bytes1 = decoder.decodeBuffer(baseStrs[1]);
return new BASE64DecodedMultipartFile(bytes1, baseStrs[0]);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}

保存到数据的是自己拼的图片名称和图片后缀,图片的存储位置在自己指定的项目目录。

至此c#上传图片告一段落

C#picturebox控件图片以json格式上传java后台保存的更多相关文章

  1. el-upload控件一次接口请求上传多个文件

    el-upload组件默认情况下上传多少个文件就会请求多少次上传接口,如何一次上传多个文件而不必多次请求上传接口呢?直接看代码 html <el-upload :action="act ...

  2. 重写FileUpload控件让它可以显示上传后的文件名

    我在以前的开发中经常遇到这样的场景:文件上传之后需要显示文件名,但是asp.net自带的fileupload是不能付给上传后的文件名值的. 以前都是做一个label显示的,今天想起来了,写个控件封装一 ...

  3. 微信小程序图片上传java后台(前后端代码)

    小程序代码 upload:function(e){ var that = this; wx.showActionSheet({ itemList: ['从相册选择','拍照'], itemColor: ...

  4. C# Winform学习---MDI窗体的设计,PictureBox控件(图片上一页下一页),Timer控件,MenuStrip控件

    一.MDI窗体的设计 1.MDI简介 MDI(Multiple Document Interface)就是所谓的多文档界面,与此对应就有单文档界面 (SDI), 它是微软公司从Windows 2.0下 ...

  5. (转)C#picturebox控件使用

    PictureBox是C#常用图片空间,本文是学习中搜集网络资料的一些整理和记录 1,PictureBox加载图片 using System.Drawing; //方式1,从图片文件载入 //下面的路 ...

  6. PictureBox控件鼠标进入的手形改变和提示

    PictureBox控件载入了图片后,如果要设置其为链接作用的功能,一般需要当鼠标移动到其上时鼠标自动变为手形以提示用户此时可以点击,如果图形无法方便辨识链接的具体功能,最好此时给与一定提示. 1.鼠 ...

  7. winfrom中pictureBox控件的部分使用方法

    一.后台属性 1.pictureBox1.Image显示图片 2.pictureBox1.ImageLocation存储和提取图片路径 二.面板属性 1.Picturebox控件SizeMode属性 ...

  8. 动态生成PictureBox控件,涉及:PictureBox控件和flowLayoutPanel面板

    一.概述 flowLayoutPanel面板是一系列控件的容器,有关详细的使用方法留待以后总结. 二.问题提出 问题提出:点击按钮,扫描指定文件夹并将其中的所有图片放在flowLayoutPanel面 ...

  9. PictureBox控件

    PictureBox控件可以显示来自位图.图标或者元文件,以及来自增强的元文件.JPEG.GIF文件的图形,如果控件不足以显示整幅图像,则裁剪图像以适应控件的大小. Sizemode 图片的大小方式 ...

随机推荐

  1. CISCO实验记录八:ACL访问控制

    1.使用ACL实现免ping #access-list 100 deny icmp 192.168.0.1 0.0.0.0 192.168.1.2 0.0.0.0 #access-list 100 p ...

  2. AOP 底层实现原理

    1.核心业务接口与实现 public interface IManager { void add(String item); } public class IManagerImpl implement ...

  3. 【Linux】安装 node.js

    1.在 linux 上安装 node.js 有几种方式,这里 教的是最简单的一种,因为其他都比较坑. 2.先去 node.js 官网 获取到已经编译好的安装包的地址, 3.使用 wget 去下载上面获 ...

  4. Qt自定义委托在QTableView中绘制控件、图片、文字

    自定义委托,继承于,QStyledItemDelegate类,重载Paint()函数, 1.实现在QTableView中绘制 格式字符串 2.实现在QTableView中绘制进度条 3.实现在QTab ...

  5. golang list使用 双层 循环 删除 遍历

    queue队列: import ( "container/list" "sync" ) type Queue struct { l *list.List m s ...

  6. Appium Desktop 元素定位和脚本录制功能

    Appium Desktop除了可以做Server之外还可以进行元素定位和脚本录制功能,点击放大镜按钮,进入页面设置.开始配置Desired Capabilities. 配置Desired Capab ...

  7. LightGBM两种使用方式

    原生形式使用lightgbm(import lightgbm as lgb) import lightgbm as lgb from sklearn.metrics import mean_squar ...

  8. Express框架开发知识点总结

    express --view=pug myapp 以上语句在当前工作目录中创建名为 myapp 的 Express 应用程序,采用的模板是jade. 以前还在纠结使用hbs模板引擎或者ejs模板,实际 ...

  9. springboot之kafka安装与实践

    环境:腾讯云centos7 1.下载 http://mirror.bit.edu.cn/apache/kafka/2.3.0/kafka_2.11-2.3.0.tgz 2.解压 tar -xvf ka ...

  10. 009-DNS域名解析系统

    一.概述 DNS是域名系统(DomainNameSystem)的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务.域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的IP地址,在I ...