【Java】【每日易学】教你最基础文件上传案例(servlet)
本帖最后由 LWGQAQ 于 2019-11-12 20:22 编辑大家好,欢迎你来到【每日易学】,我是最招人烦的大盆老师。今天我来手把手教你如何用servlet写文件上传(针对正在学习Javaweb童鞋,非喜勿喷)
首先要准备文件上传的基础工作
(1)jar包准备工作:commons-io-1.1.jar 和 commons-fileupload-1.1.jar!!!(重点)
没有的小伙伴也不要着急,网站如下
http://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi
http://commons.apache.org/proper/commons-io/download_io.cgi
(2)将from表单提交方式post
(3)在表单上加上这个属性 enctype="multipart/form-data"。
multipart/form-data是指表单数据有多部分构成,既有文本数据,又有文件等二进制数据的意思。需要注意的是:默认情况下,enctype的值是application/x-www-form-urlencoded,不能用于文件上传,只有使用了multipart/form-data,才能完整的传递文件数据。application/x-www-form-urlencoded不是不能上传文件,是只能上传文本格式的文件,multipart/form-data是将文件以二进制的形式上传,这样可以实现多种类型的文件上传。
(4)代码说明展示如下dopost调用doget
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//目的:收集表单的数据 封装一个Product实体 将上传图片存到服务器磁盘
Commodity c = new Commodity(); //收集数据的容器
Map<String,Object> map = new HashMap<String,Object>();
try { //创建磁盘文件项工厂 DiskFileItemFactory factory = new DiskFileItemFactory();
//创建文件上传核心对象
ServletFileUpload upload = new ServletFileUpload(factory);
//解析request获得文件项对象集合
List<FileItem> parseRequest = upload.parseRequest(request); for(FileItem item : parseRequest){
//判断是否是普通表单项
boolean formField = item.isFormField(); if(formField){
//普通表单项 获得表单的数据 封装到Product实体中 String fieldName = item.getFieldName(); String fieldValue = item.getString("UTF-8");
map.put(fieldName, fieldValue);
}else{ String path = "E:/Java/Workspaces/OnlineManagerMedialMall/WebRoot/pic"; String pathShop = "E:/Java/Workspaces/ManagerOnlineShop/WebRoot/pic";
String pathTomCat = "C:/Users/Lenovo/Desktop/apache-tomcat-7.0.79/webapps/OnlineManagerMedialMall/pic";
String pathShopTocat = "C:/Users/Lenovo/Desktop/apache-tomcat-7.0.79/webapps/ManagerOnlineShop/pic";
//文件上传项 获得文件名称 获得文件的内容
String fileName = item.getName(); //String paths = this.getServletContext().getRealPath("pic");
InputStream in = item.getInputStream(); OutputStream out = new FileOutputStream(path+"/"+fileName);//I:/xxx/xx/xxx/xxx.jpg
IOUtils.copy(in, out);
in.close();
out.close();
item.delete(); this.copyImage(path,pathTomCat,fileName); this.copyImage(path,pathShop,fileName); this.copyImage(path,pathShopTocat,fileName); map.put("commodity_pic", "pic/"+fileName); }}BeanUtils.populate(c, map);
//是否product对象封装数据完全
//private String pid;
//将product传递给service层
this.toAddCommodity(c);
} catch (Exception e) { e.printStackTrace();
}
}
文件上传成功(成功指的是文件上传到Tomcat服务器下的项目里,并不是真正的项目里,有的童鞋想到了,做文件拷贝工作就可以了,回答没毛病,但是单纯的拷贝工作是无意义的,真正的图片上传工作就是我们要把文件的地址存到我们数据库中)
表单提交过去的是多表单,这么才能帮助我们自动填充实体--对应数据库里的字段呢?
还记得io.jar,在Apache Commons项目下。我们可以借助API里的方法beanUtils().populate(a,b) 注明:a代表实体 b是对应map集合。实例类必须和数据库中的字段一一对应,否则添加失败。到这里上传工作已完成。在这之前同学们千万别忘记文件拷贝工作(拷贝的是我们真正项目下的路径,将文件加载到项目里)。
谢谢大家的观看!学习java是看起来简单敲起来难,记住大盆老师一句话多写 > 多看。java人加油
记得为大盆老师点个赞呗{:1_926:} 17790792319 发表于 2019-11-13 15:55
很好,很好,就是头像丑。
我最美,你走开 追逐太阳 发表于 2019-11-14 10:25
你是java的授课老师??真心请教做java的什么样的项目可以容易找到工作??
项目不一定厉害就可以找到工作哈。公司主要看你对代码层次的逻辑感,底层知识掌握程度,了解一些开源框架,数据库的核心配置使用,具有了良好的逆向思维等等都是进入这行必备要素呀。项目只是起到知识回顾。同学你可以了解一点电商,论坛项目。重点maven管理的项目。或多或少掌握开端框架SSM,SSH。阿里旗下开源框架都可以了解一下,网络服务器配置哈。
纯粹个人经验,依照自己的进度可以了解一下。我希望想进入这一行每天练习写300代码是对滴基础。不要理解错误(300要有逻辑有意义的300行代码) 排版手机格式有点乱,建议用电脑浏览 谢谢分享! 有html的源码就更好了,刚学servlet,不太会用 无限苦肉盖神 发表于 2019-11-13 10:39
有html的源码就更好了,刚学servlet,不太会用
在表单加入<input name="file"/>按照我上述所说的做一下,千万别忘记在form表单加上多媒体那个属性 很好,很好,就是头像丑。 金天的没有更新?? 追逐太阳 发表于 2019-11-13 21:58
金天的没有更新??
晚间更新最基础的连接池技术
页:
[1]
2