這幾天無意中翻到自己的老代碼,在此做一次開發筆記記錄
文件上傳:
前端使用的是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文件上傳,自動判斷文件類型
其中數據庫操作部分,需修改為自己項目中相關操作