LWGQAQ 发表于 2019-11-12 20:08

【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:}

LWGQAQ 发表于 2019-11-13 15:56

17790792319 发表于 2019-11-13 15:55
很好,很好,就是头像丑。

我最美,你走开

LWGQAQ 发表于 2019-11-14 11:02

追逐太阳 发表于 2019-11-14 10:25
你是java的授课老师??真心请教做java的什么样的项目可以容易找到工作??

项目不一定厉害就可以找到工作哈。公司主要看你对代码层次的逻辑感,底层知识掌握程度,了解一些开源框架,数据库的核心配置使用,具有了良好的逆向思维等等都是进入这行必备要素呀。项目只是起到知识回顾。同学你可以了解一点电商,论坛项目。重点maven管理的项目。或多或少掌握开端框架SSM,SSH。阿里旗下开源框架都可以了解一下,网络服务器配置哈。
纯粹个人经验,依照自己的进度可以了解一下。我希望想进入这一行每天练习写300代码是对滴基础。不要理解错误(300要有逻辑有意义的300行代码)

yyspawn 发表于 2019-11-13 06:31

LWGQAQ 发表于 2019-11-13 08:22

排版手机格式有点乱,建议用电脑浏览

xiao4904 发表于 2019-11-13 09:00

谢谢分享!

无限苦肉盖神 发表于 2019-11-13 10:39

有html的源码就更好了,刚学servlet,不太会用

LWGQAQ 发表于 2019-11-13 10:54

无限苦肉盖神 发表于 2019-11-13 10:39
有html的源码就更好了,刚学servlet,不太会用

在表单加入<input name="file"/>按照我上述所说的做一下,千万别忘记在form表单加上多媒体那个属性

17790792319 发表于 2019-11-13 15:55

很好,很好,就是头像丑。

追逐太阳 发表于 2019-11-13 21:58

金天的没有更新??

LWGQAQ 发表于 2019-11-14 10:21

追逐太阳 发表于 2019-11-13 21:58
金天的没有更新??

晚间更新最基础的连接池技术
页: [1] 2
查看完整版本: 【Java】【每日易学】教你最基础文件上传案例(servlet)