吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2050|回复: 15
上一主题 下一主题
收起左侧

[Java 转载] 【Java】【每日易学】教你最基础文件上传案例(servlet)

[复制链接]
跳转到指定楼层
楼主
LWGQAQ 发表于 2019-11-12 20:08 回帖奖励
本帖最后由 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人加油
记得为大盆老师点个赞呗

免费评分

参与人数 3吾爱币 +3 热心值 +2 收起 理由
JackLove1234 + 1 我很赞同!
17790792319 + 1 + 1 作者自己投的
yuejunqi + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
 楼主| 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行代码)

免费评分

参与人数 1吾爱币 +1 收起 理由
追逐太阳 + 1 用心讨论,共获提升!

查看全部评分

头像被屏蔽
沙发
yyspawn 发表于 2019-11-13 06:31
3#
 楼主| LWGQAQ 发表于 2019-11-13 08:22 |楼主
排版手机格式有点乱,建议用电脑浏览
4#
xiao4904 发表于 2019-11-13 09:00
谢谢分享!
5#
无限苦肉盖神 发表于 2019-11-13 10:39
有html的源码就更好了,刚学servlet,不太会用
6#
 楼主| LWGQAQ 发表于 2019-11-13 10:54 |楼主
无限苦肉盖神 发表于 2019-11-13 10:39
有html的源码就更好了,刚学servlet,不太会用

在表单加入<input name="file"/>按照我上述所说的做一下,千万别忘记在form表单加上多媒体那个属性
7#
17790792319 发表于 2019-11-13 15:55
很好,很好,就是头像丑。
9#
追逐太阳 发表于 2019-11-13 21:58
金天的没有更新??
10#
 楼主| LWGQAQ 发表于 2019-11-14 10:21 |楼主
追逐太阳 发表于 2019-11-13 21:58
金天的没有更新??

晚间更新最基础的连接池技术
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 15:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表