这几天无意中翻到自己的老代码,在此做一次开发笔记记录
文件上传:
前端使用的是layui的文件上传组件
后台使用的springboot框架
前端页面代码:
html:
<button type="button" class="layui-btn" id="test1"><i class="layui-icon"></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文件上传,自动判断文件类型
其中数据库操作部分,需修改为自己项目中相关操作