飞道的博客

Java Servlet 接收微信小程序图片上传实例 附加包问题分析

342人阅读  评论(0)

背景

微信小程序 后台是java,没有用框架,后台用的是Servlet接收数据做交互。
查了很多资料发现都是差不多的方法,但是各种出错,这里记录下我的错误以及解决。用下面的方法做图片上传操作(遇到的问题后面讲):

微信小程序端

// js文件 用官方的方法
wx.uploadFile({
    url: app.globalData.ip+'/GoodsPicUp',// 这里自己的地址
    filePath: upload_picture_list[j]['path'], //上传的文件本地地址  
    header:{"Content-Type": "multipart/form-data"},  
    name: 'file',
    formData: {// 附带的数据
      'num': j,
      'date': date,
      'time': time,
      'newid':newid,
      'openid':openid,
      'isxiugai':0
  },

java Servlet端口

这里的包很关键,后面有!


import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.servlet.annotation.WebServlet;
import javax.servlet.ServletException;
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 com.dao.GoodsDao;
import com.mysql.jdbc.Connection;
import com.util.DbUtil;


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:\\AAAAAAupload";
	      // 文件夹不存在 新建文件夹
	      File dirFile = new File(dir);
	      if (!dirFile.exists()) {
	        dirFile.mkdirs();
	      }
	      try{	
	    	//工厂模式 --新建工厂
	        FileItemFactory factory = new DiskFileItemFactory();
	        // 产品
	        ServletFileUpload fileUpload = new ServletFileUpload(factory);
	        // 获取文件list
	        List<FileItem> items = fileUpload.parseRequest(request);
	        
	        //--获取传来的其他数据
	        String num = items.get(0).getString();
	        String date = items.get(1).getString();
	        String time = items.get(2).getString();
	        String newid = items.get(3).getString();
	        String openid = items.get(4).getString();
	        String isxiugai = items.get(5).getString();
	        //---
	        
	        for (FileItem item : items) {
	          if (item.isFormField()){//输出传来的其他信息
	        	//文件传来的信息  
	           // String name = item.getFieldName();
	            //System.out.println(name+" "+URLDecoder.decode(item.getString(), "utf-8"));
	           
	         }else{	//获取传来的文件
	        	  // 建立子文件夹 dir + openid +date
	        	 String date_ = date.replace('/','_');
	        	 String dir1 = dir + "\\" + openid + "\\"+date_;
	        	  // 文件夹不存在 新建文件夹
		   	     File dirFile1 = new File(dir1);
		   	      if (!dirFile1.exists()) {
		   	        dirFile1.mkdirs();
		   	      }
	        	 System.out.println("新文件夹地址"+dir1);
	              //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 flag = item.getName();
	              String namehouzhui = flag.substring(flag.length()-4);//如 .jpg .png
	              String time_ = time.replace(':','_');
	              String fileName = time_ + "_" + num + namehouzhui;
	              System.out.println("filePath=" + dir1 + "\\" + fileName);
	              File saveFile = new File(dirFile1, fileName);
	              item.write(saveFile);
	              
	            

	         }
	       }
	      }
	      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);
	}

导包

这两个包是一起用的,版本最好下载我这个。我在版本这里出现了很久的错误

具体包地址:
fileupload包地址

io包地址

导入方法我这里就不做过多的叙述了!

上面就OK啦 一般人好像都可以成功,但是我就遇到问题了

tomcat启动失败的问题

发现我的项目加上上面那个Servlet文件代码后,tomcat就启动不了,报错(类似,因为已经解决了):

Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]

然后把这个接受图片的Servlet删除后就不报错吗,正常启动。

解决办法:

将上面的两个包复制到改javaweb项目路的如下地方

刷新,我的就可以启动服务器,正常接受图片了。

题外话:-----------------------------------------------------

突然想起之前也遇到一个类似的加上某个语句tomcat启动不了的问题 ,是把相应的jar包放到本机tomcat安装位置lib文件夹里面,那次没有记录现在忘了。值得记录一下!有问题可以留言~


转载:https://blog.csdn.net/qq_37521610/article/details/104774946
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场