上传文件

Posted mayouyou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了上传文件相关的知识,希望对你有一定的参考价值。

上传文件
a.引入两个jar
apache:commons-fileupload.jar组件
commons-fileupload.jar组件依赖commons-io.jar
b.代码
前台jsp:
<input type="file" name="spicture"/>
表单提交方式必须为post
在表单必须增加一个属性enctype="multipart/form-data"
后台servlet:

try {
        boolean isMultpart = ServletFileUpload.isMultipartContent(request);
        if(isMultpart) {//判断前台的form是否有multipart属性
            FileItemFactory factory=new DiskFileItemFactory();
            ServletFileUpload upload=new ServletFileUpload(factory);
            
                //通过parseRequest解析form中的所有请求字段,并保存到items集合中(即前台传递的sno,sname,spicture此时就保存在了items中)
                List<FileItem> items = upload.parseRequest(request);
                //遍历items中的数据(item=sno sname spicture)
                Iterator<FileItem> iter= items.iterator();
                while(iter.hasNext()) {
                    FileItem item = iter.next();
                    String itemName=item.getFieldName();
                    int sno=-1;
                    String sname=null;
                    //判断前台字段 是普通form表单字段(sno sname),还是文件字段
                    if(item.isFormField()) {
                        if(itemName.equals("sno")) {//根据name属性判断item是sno sname还是spicture
                            sno=Integer.parseInt(item.getString("utf-8"));
                            //System.out.println("非其他字段sno");
                        }else if(itemName.equals("sname")) {
                            sname=item.getString("utf-8");
                            //System.out.println("非其他字段sname");
                        }else {
                            System.out.println("其他字段");
                        }
                    }else {//spicture
                        //    文件上传
                        //文件名 getFieldName是获取普通表单字段的Name值
                        //getName()是获取文件名
                        String fileName = item.getName();
                        //获取文件内容并上传
                        //定义文件路径:指定上传的位置(服务器路径)
                        //获取服务器路径
                        String path=request.getSession().getServletContext().getRealPath("upload");
                        
                        File file=new File(path,fileName);
                        item.write(file);//上传
                        System.out.println(fileName+"上传成功!");
                        return ;
                    }
                    
                }
        }
        
        }catch (FileUploadException e) {
                e.printStackTrace();
            }//解析请求
        catch (Exception e) {
            e.printStackTrace();
        }

 


注意的问题:
上传的目录 uplpad:
1.如果修改代码,则tomcat重启会被删除
原因:当修改代码的时候,tomcat会重新编译一份class并且重新部署(宠信创建各种目录)

2.如果不修改代码,则不会被删除
原因:没有修改代码,class仍然是之前的class
因此为了防止上传目录丢失:a.虚拟路径b.直接更改上传目录到非tomcat目录

以上是关于上传文件的主要内容,如果未能解决你的问题,请参考以下文章

将存储在内存中的文件上传到s3

JS创建文件并上传服务器

ajaxFileUpload上传带参数文件及JS验证文件大小

android的自带的httpClient 怎么上传文件

大文件上传下载实现思路,分片断点续传代码实现,以及webUpload组件

如何通过 HttpWebRequest 上传文件?