zoukankan      html  css  js  c++  java
  • java 文件上传

    这几天无意中翻到自己的老代码,在此做一次开发笔记记录

    文件上传:

    前端使用的是layui的文件上传组件

    后台使用的springboot框架


    前端页面代码:

    html:

    <button type="button" class="layui-btn" id="test1"><i class="layui-icon">&#xe67c;</i>上传图片</button>

    js:

      //普通图片上传
              var uploadInst = upload.render({
                elem: '#test1'
                ,url: '/uploadFile/uploadFile'
                ,data:{
                    filetype:"1"
                }
                  ,size:0
                ,before: function(obj){
                  /* //预读本地文件示例,不支持ie8
                  obj.preview(function(index, file, result){
                    $('#demo1').attr('src', result); //图片链接(base64)
                  }); */
                }
                ,done: function(res){
                  //如果上传失败
                  if(res.code > 0){
                    return layer.msg('上传失败');
                  }else if(res.code===0){//上传成功
    
                      zuo.department.image = res.fileid;
                      zuo.department.imageurl = res.fileurl;
    
                      
                  }
                  
                }
                ,error: function(){
                  //演示失败状态,并实现重传
                  var demoText = $('#demoText');
                  demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
                  demoText.find('.demo-reload').on('click', function(){
                    uploadInst.upload();
                  });
                }
              });

    后台java代码:

    Application.java中加入

     /**  
         * 文件上传配置  
         * @return  
         */  
        @Bean  
        public MultipartConfigElement multipartConfigElement() {  
            MultipartConfigFactory factory = new MultipartConfigFactory();  
            //单个文件最大  
            factory.setMaxFileSize("10240KB"); //KB,MB  
            /// 设置总上传数据总大小  
            factory.setMaxRequestSize("102400KB");  
            return factory.createMultipartConfig();  
        }  

    外部常量:

    /**
         * 文件上传地址(pc)主文件夹(默认)
         */
        private String folder = "C://";
        
        /**
         * 文件上传地址(pc)文件夹(默认)
         */
        private String pcfile="upload/pcfiles/";
        
        /**
         * 图片文件名 filetype=1
         */
        private String image="image";
        
        /**
         * 文档 filetype=2
         */
        private String office="office";
        
        /**
         * 视频 filetype=3
         */
        private String video = "video";
        
        /**
         * 种子 filetype=4
         */
        private String bt = "bt";
        
        /**
         * 音乐 filetype=5
         */
        private String misic = "misic";
        
        /**
         * 其他 filetype=6
         */
        private String other = "other";

    主方法:

        /***
         * 上传单个文件(普通文件上传)
         * 可js 直接调此方法,也可做工具接口
         * 同步方法
         * @param file
         * @param fileurl 存储地址:有则用,无则使用默认
         * @param filetype(1:图片,2:文档,3:视频,4:种子,5:音乐,6:其他)
         * @return 
         *     SUCCESS 成功/失败
         *     msg 提示内容
         *     fileid 文件id
         *     fileurl 访问文件的url
         */
        @RequestMapping("/uploadFile")
        @ResponseBody
        public synchronized Map<String, Object> uploadFilex(MultipartFile file,String fileurl,String filetype,HttpServletRequest request, HttpServletResponse response) {
    
            /**
             * 主方法块
             */
            Map<String, Object> result = new HashMap<String, Object>();
            HttpSession session = request.getSession();
            try {
                
                
                /**
                 * 当前人
                 */
                User user=(User)session.getAttribute("USER");
                
                /**
                 *  这里的路径(可以自定义)
                 */
                String filePath ="";
                /**
                 * 图片访问地址
                 */
                String url="";
                
                /**
                 * 不传入类型(自动判断)
                 */
                if(filetype==null){
                    
                    InputStream input = file.getInputStream();
                    
                    /**
                     * 判断文件类型
                     */
                    Integer t = FileTypeJudge.isFileType(
                                     FileTypeJudge.getType(input));
                    filetype=t.toString();
                }
                /**
                 * 不同文件存放不同文件夹
                 */
                if(fileurl==null||fileurl.equals("")){
                    filePath=folder+pcfile;
                    url = pcfile;
                    if(filetype.equals("1")){//图片
                        filePath +=this.image;
                        url +=this.image;
                    }else if(filetype.equals("2")){//文档
                        filePath +=this.office;
                        url +=this.office;
                    }else if(filetype.equals("3")){//视频
                        filePath +=this.video;
                        url +=this.video;
                    }else if(filetype.equals("4")){//种子
                        filePath +=this.bt;
                        url +=this.bt;
                    }else if(filetype.equals("5")){//音乐
                        filePath +=this.misic;
                        url +=this.misic;
                    }else{//其他
                        filePath +=this.other;
                        url +=this.other;
                    }
                }else{
                    filePath= fileurl;
                }
                /**
                 * 获取图片上传的文件路径
                 */
                File picFile = new File(filePath);
                /**
                 *  判断文件夹是否存在,如果不存在就创建
                 */
                if (!picFile.isDirectory()) {
                    picFile.mkdirs();//mkdir创建单层文件夹;mkdirs创建多层文件夹
                }
                /**
                 *  需要返回的文件名
                 */
                String originalFilename = null;
                /**
                 *  文件名前缀
                 */
                String prefix = file.getOriginalFilename().substring(0,file.getOriginalFilename().lastIndexOf("."));
                /**
                 *  文件后缀
                 */
                String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."),
                        file.getOriginalFilename().length());
                
                long size = file.getSize();
                
                /**
                 * 处理大小
                 */
                String filesize = getPrintSize(size);
                
                
                /**
                 * 存入数据库(默认isdel=1)
                 */
                WcFile wcFile = new WcFile();
                wcFile.setFilename(prefix);
                wcFile.setFiletype(filetype);
                wcFile.setFileformat(suffix);
                wcFile.setFilesize(filesize);
                wcFile.setCreatetime(new Date());
                wcFile.setCreateperson(user.getId()+"");
                wcFile.setUpdatetime(new Date());
                wcFile.setUpdateperson(user.getId()+"");
                wcFile.setIsdel("1");//文件未上传之前,默认删除
                wcFile.setStatus("0");//未上传
                wcFileService.insert(wcFile);//存库,返回id
                int id = wcFile.getId();
                
                /**
                 *  生成新的文件名(UUID加入+_+文件id)避免冲突
                 */
                String uuid = UUID.randomUUID().toString().replaceAll("-", "");
                originalFilename = uuid +"_"+id + suffix;
                /**
                 *  这里不必处理IO流关闭的问题,因为FileUtils.copyInputStreamToFile()方法内部会自动把用到的IO流关掉
                 *  此处也可以使用Spring提供的MultipartFile.transferTo(File dest)方法实现文件的上传
                 */
                file.transferTo(new File(filePath, originalFilename));
                 /**
                  * FileUtils.copyInputStreamToFile(myfile.getInputStream(), new
                  * File(filePath, originalFilename));
                  * 图片压缩
                  **/
                
                /**
                 * 上传成功后(更新对应文件数据)
                 */
                url = url+"/"+originalFilename;
                wcFile.setFileurl(url);//存入文件地址
                wcFile.setIsdel("0");//显示
                wcFile.setStatus("1");//上传成功
                wcFileService.updateByPrimaryKey(wcFile);
                
                /**
                 * 封装富文本图片反馈url(http://localhost:8080/upload/test.html)
                 */
                String url2=request.getScheme()+"://"+ request.getServerName()+":"+request.getLocalPort();
                Map<String, Object> result2 = new HashMap<String, Object>();
                result2.put("src",url2+"/"+url);
                
                
                result.put("code", 0);//layui 识别成功
                result.put("SUCCESS", true);
                result.put("msg", "上传成功");
                result.put("data", result2);
                result.put("fileid", wcFile.getId());
                result.put("fileurl", url);//访问地址;如:upload/pcfiles/xxxx.xx
                return result;
            } catch (Exception e) {
                e.printStackTrace();
                result.put("SUCCESS", false);
                result.put("msg", "上传失败");
                return result;
            }
        }

    其中加入了自动判断文件格式部分

    见博客文章:java文件上传,自动判断文件类型

    其中数据库操作部分,需修改为自己项目中相关操作

  • 相关阅读:
    常用的模板标签
    django的静态文件的引入
    模板路径的查找
    类型初始值设定项引发异常
    ASP.NET基础笔记
    ASP.NET 学习笔记
    【1】验证适配器
    同时安装vs2010和VS2012后IEnumerable<ModelClientValidationRule>编译错误
    跨窗体传值
    扩展方法
  • 原文地址:https://www.cnblogs.com/zktww/p/11016697.html
Copyright © 2011-2022 走看看