微信小程序向Java传递信息及图片

    技术2026-01-09  10

    先看一下页面 记录一下遇到的问题 这里的经度纬度需要使用 api wx.getLocation来获取经纬度 wx.getLocation({ success: function (res) { var jingdu=res.latitude; var weidu=res.longitude; _this.getDistrict(res.latitude, res.longitude) _this.setData({ jingdu:jingdu, weidu:weidu }) }, })

    想要获取具体城市位置,需要向地图api发送请求,并带有经纬度的参数,及key值 getDistrict(latitude, longitude) { _page = this; wx.request({ url: https://apis.map.qq.com/ws/geocoder/v1/?location=${latitude},${longitude}&key=${keys}, header: { ‘Content-Type’: ‘application/json’ }, success: function (res) { console.log(res.data.result.address_component.district, res.data.result)

    // 省 let province = res.data.result.address_component.province; // 市 let city = res.data.result.address_component.city; // 区 let district = res.data.result.address_component.district; let street = res.data.result.address_component.street; _page.setData({ district: res.data.result.address_component.district, region: [province, city, district, street,latitude,longitude], sheng:province, shi:city, qu:district, lu:street }) }

    }) }, 这里key值也是我百度随便抄的一个(就不写出来了),可以去注册,获取一个

    这里还有一个拍摄,使用小程序中的wx.chooseImage 其中有一些必填项,可以参照微信小程序官网的文档看一下 拍摄完后,还需要上传图片,需要使用wx.uploadFile chooseimage:function(){ var that=this; wx.chooseImage({ sourceType: [‘camera’], success (res) { const tempFilePaths = res.tempFilePaths; that.setData({ tempFilePaths:tempFilePaths }) wx.uploadFile({ url: ‘http://localhost:8080/Location/UploadPhotoServlet’, //仅为示例,非真实的接口地址 filePath: tempFilePaths[0], name: ‘file’, formData: { ‘user’: ‘test’ },

    success (res){ const data = res.data; var photodizhi=res.data; that.setData({ photodizhi:photodizhi }) //do something } }) } })

    }, 拍摄这个按钮中有两个事件,一个是用于拍摄照片,一个是用于上传,将图片上传给我的Java后端,其中wx.uploadFile这个api中有一个url,是必填项,我的Java后端使用servlet接收,这是我这个servlet的地址 这里图片先传给servlet ,然后把图片传至指定的文件夹, 然后将地址传递回来,并且setData,将数据放在里面,方便下面使用

    tijiao:function(){ var that=this; var jingdu=that.data.jingdu; var weidu=that.data.weidu; var sheng=that.data.sheng; var shi=that.data.shi; var qu=that.data.qu; var lu=that.data.lu; var name=that.data.name; var wendu=that.data.wendu; var classname=that.data.classname; var tempFilePaths=that.data.tempFilePaths; var photodizhi=that.data.photodizhi; wx.request({ url: ‘http://localhost:8080/Location/test’, data:{ name:name, classname:classname, wendu:wendu, jingdu:jingdu, qw:that.data.qw, weidu:weidu, dizhi:sheng+shi+qu+lu, photodizhi:photodizhi }, method:‘GET’, header: { ‘content-type’: ‘application/json’ // 默认值 }, success (res) { console.log(res.data)

    } }) /** // 数据只提交一次,点击提交后按钮为禁用状态 if (!this.data.isDisabled) { //当disabled=false时 this.setData({ isDisabled: true, //修改isDisabled的值为true(即启用状态) text: "编辑" //文字修改为“编辑” }) } else { //当disabled=true时 this.setData({ isDisabled: false, //修改isDisabled的值为false(即禁用状态) text: "保存" //文字修改为“保存” }) } */

    }, 这是绑定提交按钮的事件,将个人信息, 及经纬度还有当前地址,以及图片地址一起传递给servlet

    这里记录一下, 我原先的实现方法, 我原先是将图片上传放到了提交这个事件中,点击了提交后,图片与这些信息同时上传给servlet,但不是同一个servlet , 在上面的URL中即可看出来,一个传给testservlet,一个传给uploadServlet,然后我在uploadServlet 中将图片地址通过重定向传给第三个servlet,testServlet中的信息也是这样传递给第三个servlet,然后由第三个servlet传递给service(这里我们称第三个servlet为C), 在由service传递给dao层, 刚开始实现后没发现问题,在后续实现新功能的时候连续测试发现了一个问题, 通过重定向传递给C,数据会缓存在C中,而一旦触发提交事件后,由于C中有数据缓存,C会直接向service提交,而后其他两个servlet才刚获取到数据并且将数据发送给C,简易的说,就是那两个servlet执行的没C快,让它先跑了一步,没来的及将新数据传递给它,因此,我将上传图片直接放到拍摄按钮这个的事件中, 拍摄完成后, 直接将图片上传给servlet,而后将图片地址传递回来,将图片地址,当做一个普通数据传递跟其他的数据一起传递给testServlet,然后将数据存储就好了

    这里上一下我两个servlet的代码

    package servlet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.URLDecoder; import java.util.List; import java.util.Properties;

    import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;

    import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload;

    import service.testService; import domain.test;

    @WebServlet("/test") public class testServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    response.setContentType("text/html;charset=utf-8"); /* 设置响应头允许ajax跨域访问 */ response.setHeader("Access-Control-Allow-Origin", "*"); /* 星号表示所有的异域请求都可以接受, */ response.setHeader("Access-Control-Allow-Methods", "GET,POST"); String jingdu = request.getParameter("jingdu"); String weidu = request.getParameter("weidu"); // String qw=request.getParameter("qw"); String dizhi = request.getParameter("dizhi"); String name = request.getParameter("name"); String wendu = request.getParameter("wendu"); String classname = request.getParameter("classname"); String photodizhi = request.getParameter("photodizhi"); System.out.println(name + classname + wendu+photodizhi); System.out.println(jingdu); System.out.println(weidu); System.out.println(dizhi); testService ts=new testService(); ts.add(name, classname, wendu, jingdu, weidu, dizhi, photodizhi);

    // Properties capitals = new Properties(); // capitals.put(“name1”,name1); // capitals.put(“wendu”,wendu); // capitals.put(“classname”,classname); // capitals.put(“jingdu”,jingdu); // capitals.put(“weidu”,weidu); // capitals.put(“dizhi”,dizhi); // OutputStream os = new FileOutputStream(“PropertiesUtil.properties”); // capitals.store(os, “a”); // os.close();

    } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** System.out.println("图片存放"); request.setCharacterEncoding("UTF-8"); boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart) { String dir = "D:\\upload"; File dirFile = new File(dir); if (!dirFile.exists()) { dirFile.mkdirs(); } try { FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload fileUpload = new ServletFileUpload(factory); List<FileItem> items = fileUpload.parseRequest(request); for (FileItem item : items) { if (item.isFormField()) { String name = item.getFieldName(); System.out.println(name + " " + URLDecoder.decode(item.getString(), "utf-8")); } else { System.out.println(dir); System.out.println("item.getName=" + item.getName()); String longFileName = item.getName(); System.out.println("longFileName:" + longFileName); char indexChar = '\\'; String fileName = item.getName().substring( longFileName.lastIndexOf(indexChar) + 1, longFileName.length()); String photodizhi = dir + "\\" + fileName; System.out.println("filePath=" + dir + "\\" + fileName); File saveFile = new File(dirFile, fileName); item.write(saveFile); } } } catch (Exception e) { e.printStackTrace(); } } */ }

    }

    package servlet;

    import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.io.Writer; import java.net.URLDecoder; import java.util.Iterator; import java.util.List;

    import java.util.Properties;

    import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;

    import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload;

    import domain.test;

    @WebServlet("/UploadPhotoServlet") public class UploadPhotoServlet extends HttpServlet { private static final long serialVersionUID = 1L; private String uploadFilePath = “D:\upload”; File tempFile;

    /** * @see HttpServlet#HttpServlet() */ public UploadPhotoServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("图片存放"); request.setCharacterEncoding("UTF-8"); boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart) { String dir = "D:\\upload"; File dirFile = new File(dir); if (!dirFile.exists()) { dirFile.mkdirs(); } try { FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload fileUpload = new ServletFileUpload(factory); List<FileItem> items = fileUpload.parseRequest(request); for (FileItem item : items) { if (item.isFormField()) { String name = item.getFieldName(); System.out.println(name + " " + URLDecoder.decode(item.getString(), "utf-8")); } else { System.out.println(dir); System.out.println("item.getName=" + item.getName()); String longFileName = item.getName(); System.out.println("longFileName:" + longFileName); char indexChar = '\\'; String fileName = item.getName().substring( longFileName.lastIndexOf(indexChar) + 1, longFileName.length()); System.out.println(dir); System.out.println(fileName); String photodizhi = dir + "\\" + fileName; System.out.println("filePath=" + dir + "\\" + fileName); File saveFile = new File(dirFile, fileName); item.write(saveFile);

    // Properties pro = new Properties(); // pro.put(“photodizhi”, photodizhi); // OutputStream os = new FileOutputStream( // “PropertiesUtil.properties”); // pro.store(os, “a”); // os.close(); // request.getRequestDispatcher("/insert").forward(request, // response);

    Writer out = response.getWriter(); out.write(photodizhi); out.flush(); } } } catch (Exception e) { e.printStackTrace(); } } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); }

    }

    Processed: 0.023, SQL: 9