C#picturebox控件图片以json格式上传java后台保存
程序员文章站
2022-06-04 11:49:35
关于winform上传图片到Java后端,保存到数据库,有多种方法,本文主要介绍利用picturebox控件,点击按钮上传图片,将图片转化为base64格式,以json格式上传到Java后台,再从java端解析,保存到数据库。 上代码: 首先,画面上添加一个picturebox控件,再添加一个but ......
关于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#上传图片告一段落