背景
微信小程序 后台是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
查看评论