关于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. 删除顺序表L中下标为p(0<=p<=length-1)的元素,成功返回1,不成功返回0,并将删除元素的值赋给e

    原创:转载请注明出处. [天勤2-2]删除顺序表L中下标为p(0<=p<=length-1)的元素,成功返回1,不成功返回0,并将删除元素的值赋给e 代码: //删除顺序表L中下标为p(0 ...

  2. Windows Form, Ok, Cancel button

    1. 为button设置DialogResult property为非None值, 可以关闭父窗口,并使父窗口的DialogResult property返回相应的值. http://msdn.mic ...

  3. Cesium中级教程6 - 3D Models 三维模型

    3D Models 三维模型 本教程将教您如何通过Primitive API转换.加载和使用Cesium中的三维模型.如果你是Cesium的新用户,可能需要阅读三维模型部分的(空间数据可视化教程)[h ...

  4. Maven-Profile 环境隔离

    作用 快速切换不同的配置环境,比如开发时是连接的本地数据库,发布线上时是另外的数据库,每次编译打包时都要修该配置文件比较麻烦,这时就可以使用环境隔离了. 配置 本地(Local), 开发(Dev), ...

  5. Vue —— 从环境搭建到发布

    之前学习 Vue 的时候也是按着别人的文档一步步下载安装构建项目再运行,为了避免忘记步骤,所以还是记在这吧. 参考链接: https://www.zybuluo.com/xudongh/note/75 ...

  6. python3 @classmethod 和 @staticmethod 的区别

    如果您将某个东西定义为classmethod,这可能是因为您打算从类而不是类实例中调用它. 定义类方法的几种方式: 常规方式                       : 需要self隐士传递当前类 ...

  7. 三种单点登录SSO的实现原理

    单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任.单点登录在大型网站里使用得 ...

  8. RabbitMQ简单Java示例——生产者和消费者

    添加Maven依赖: 使用rabbitmq-client的最新Maven坐标: <!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp ...

  9. ffmpeg 编译集成libfdk-aac

    目录 1. 编译libfdk-aac 2. 编译ffmpeg 1. 编译libfdk-aac 下载源码:$ git clone https://github.com/mstorsjo/fdk-aac. ...

  10. Java学习笔记-枚举类

    实例有限且固定的类成为枚举类 枚举类的实现 早期时候的实现形式: public static final int SEASON_SPRING = 1; public static final int ...