欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#picturebox控件图片以json格式上传java后台保存

程序员文章站 2023-08-29 16:43:31
关于winform上传图片到Java后端,保存到数据库,有多种方法,本文主要介绍利用picturebox控件,点击按钮上传图片,将图片转化为base64格式,以json格式上传到Java后台,再从java端解析,保存到数据库。 上代码: 首先,画面上添加一个picturebox控件,再添加一个but ......

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

上代码:
首先,画面上添加一个picturebox控件,再添加一个button,给button设置click事件-获取到base64格式的字符串。
C#picturebox控件图片以json格式上传java后台保存

/// <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#上传图片告一段落