首頁 > 繪畫

Java專案:資源下載工具(java+swing)

作者:由 紙鶴視界 發表于 繪畫日期:2022-06-06

字尾mkv temp怎麼開啟

功能簡介:

下載地址、儲存位置、下載設定、下載進度

Java專案:資源下載工具(java+swing)

Java專案:資源下載工具(java+swing)

Java專案:資源下載工具(java+swing)

檔案倉庫控制器:

/** * @ClassName: FileStoreController * @Description: 檔案倉庫控制器 **/@Controllerpublic class FileStoreController extends BaseController { private Logger logger = LogUtils。getInstance(FileStoreController。class); /** * @Description 上傳臨時檔案 **/ @PostMapping(“/uploadTempFile”) public String uploadTempFile(@RequestParam(“file”) MultipartFile file,String url) { session。setAttribute(“imgPath”,“https://ss3。bdstatic。com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2654852821,3851565636&fm=26&gp=0。jpg”); String name = file。getOriginalFilename()。replaceAll(“ ”,“”); if (!checkTarget(name)){ logger。error(“臨時檔案上傳失敗!檔名不符合規範。。。”); session。setAttribute(“msg”, “上傳失敗!檔名不符合規範”); return “redirect:/temp-file”; } SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd”); String dateStr = format。format(new Date()); String path = “temp/”+dateStr +“/”+UUID。randomUUID(); try { if (FtpUtil。uploadFile(“/”+path, name, file。getInputStream())){ //上傳成功 logger。info(“臨時檔案上傳成功!”+name); String size = String。valueOf(file。getSize()); TempFile tempFile = TempFile。builder()。fileName(name)。filePath(path)。size(size)。uploadTime(new Date())。build(); if (tempFileService。insert(tempFile)) { try { String id = UUID。randomUUID()。toString(); String p = request。getSession()。getServletContext()。getRealPath(“/user_img/”); Long t = tempFile。getUploadTime()。getTime(); url = url+“/file/share?t=”+ UUID。randomUUID()。toString()。substring(0,10) +“&f=”+tempFile。getFileId()+“&p=”+size+“&flag=2”; File targetFile = new File(p, “”); if (!targetFile。exists()) { targetFile。mkdirs(); } File f = new File(p, id + “。jpg”); if (!f。exists()){ //檔案不存在,開始生成二維碼並儲存檔案 OutputStream os = new FileOutputStream(f); QRCodeUtil。encode(url, “/static/img/logo。png”, os, true); os。close(); } //非同步刪除臨時檔案 tempFileService。deleteById(tempFile。getFileId()); session。setAttribute(“imgPath”,“user_img/”+id+“。jpg”); session。setAttribute(“url”,url); session。setAttribute(“msg”,“上傳成功,掃碼/訪問連結 即可下載!”); return “redirect:/temp-file”; } catch (Exception e) { e。printStackTrace(); } }else { logger。info(“臨時檔案資料庫寫入失敗!”+name); session。setAttribute(“url”,“error”); session。setAttribute(“msg”, “伺服器出錯了,臨時檔案上傳失敗!”); } }else{ //上傳失敗 logger。info(“臨時檔案上傳失敗!”+name); session。setAttribute(“url”,“error”); session。setAttribute(“msg”, “伺服器出錯了,上傳失敗!”); } } catch (IOException e) { e。printStackTrace(); } return “redirect:/temp-file”; } /** * @Description 網盤的檔案上傳 **/ @PostMapping(“/uploadFile”) @ResponseBody public Map uploadFile(@RequestParam(“file”) MultipartFile files) { Map map = new HashMap<>(); if (fileStoreService。getFileStoreByUserId(loginUser。getUserId())。getPermission() != 0){ logger。error(“使用者沒有上傳檔案的許可權!上傳失敗。。。”); map。put(“code”, 499); return map; } FileStore store = fileStoreService。getFileStoreByUserId(loginUser。getUserId()); Integer folderId = Integer。valueOf(request。getHeader(“id”)); String name = files。getOriginalFilename()。replaceAll(“ ”,“”); //獲取當前目錄下的所有檔案,用來判斷是否已經存在 List myFiles = null; if (folderId == 0){ //當前目錄為根目錄 myFiles = myFileService。getRootFilesByFileStoreId(loginUser。getFileStoreId()); }else { //當前目錄為其他目錄 myFiles = myFileService。getFilesByParentFolderId(folderId); } for (int i = 0; i < myFiles。size(); i++) { if ((myFiles。get(i)。getMyFileName()+myFiles。get(i)。getPostfix())。equals(name)){ logger。error(“當前檔案已存在!上傳失敗。。。”); map。put(“code”, 501); return map; } } SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd”); String dateStr = format。format(new Date()); String path = loginUser。getUserId()+“/”+dateStr +“/”+folderId; if (!checkTarget(name)){ logger。error(“上傳失敗!檔名不符合規範。。。”); map。put(“code”, 502); return map; } Integer sizeInt = Math。toIntExact(files。getSize() / 1024); //是否倉庫放不下該檔案 if(store。getCurrentSize()+sizeInt > store。getMaxSize()){ logger。error(“上傳失敗!倉庫已滿。”); map。put(“code”, 503); return map; } //處理檔案大小 String size = String。valueOf(files。getSize()/1024。0); int indexDot = size。lastIndexOf(“。”); size = size。substring(0,indexDot); int index = name。lastIndexOf(“。”); String tempName = name; String postfix = “”; int type = 4; if (index!=-1){ tempName = name。substring(index); name = name。substring(0,index); //獲得檔案型別 type = getType(tempName。toLowerCase()); postfix = tempName。toLowerCase(); } try { //提交到FTP伺服器 boolean b = FtpUtil。uploadFile(“/”+path, name + postfix, files。getInputStream()); if (b){ //上傳成功 logger。info(“檔案上傳成功!”+files。getOriginalFilename()); //向資料庫檔案表寫入資料 myFileService。addFileByFileStoreId( MyFile。builder() 。myFileName(name)。fileStoreId(loginUser。getFileStoreId())。myFilePath(path) 。downloadTime(0)。uploadTime(new Date())。parentFolderId(folderId)。 size(Integer。valueOf(size))。type(type)。postfix(postfix)。build()); //更新倉庫表的當前大小 fileStoreService。addSize(store。getFileStoreId(),Integer。valueOf(size)); try { Thread。sleep(5000); map。put(“code”, 200); } catch (InterruptedException e) { e。printStackTrace(); } }else{ logger。error(“檔案上傳失敗!”+files。getOriginalFilename()); map。put(“code”, 504); } } catch (IOException e) { e。printStackTrace(); } return map; } /** * @Description 網盤的檔案下載 **/ @GetMapping(“/downloadFile”) public String downloadFile(@RequestParam Integer fId){ if (fileStoreService。getFileStoreByUserId(loginUser。getUserId())。getPermission() == 2){ logger。error(“使用者沒有下載檔案的許可權!下載失敗。。。”); return “redirect:/error401Page”; } //獲取檔案資訊 MyFile myFile = myFileService。getFileByFileId(fId); String remotePath = myFile。getMyFilePath(); String fileName = myFile。getMyFileName()+myFile。getPostfix(); try { //去FTP上拉取 OutputStream os = new BufferedOutputStream(response。getOutputStream()); response。setCharacterEncoding(“utf-8”); // 設定返回型別 response。setContentType(“multipart/form-data”); // 檔名轉碼一下,不然會出現中文亂碼 response。setHeader(“Content-Disposition”, “attachment;fileName=” + URLEncoder。encode(fileName, “UTF-8”)); boolean flag = FtpUtil。downloadFile(“/” + remotePath, fileName, os); if (flag) { myFileService。updateFile( MyFile。builder()。myFileId(myFile。getMyFileId())。downloadTime(myFile。getDownloadTime() + 1)。build()); os。flush(); os。close(); logger。info(“檔案下載成功!” + myFile); } } catch (Exception e) { e。printStackTrace(); } return “success”; } /** * @Description 刪除檔案 **/ @GetMapping(“/deleteFile”) public String deleteFile(@RequestParam Integer fId,Integer folder){ //獲得檔案資訊 MyFile myFile = myFileService。getFileByFileId(fId); String remotePath = myFile。getMyFilePath(); String fileName = myFile。getMyFileName()+myFile。getPostfix(); //從FTP檔案伺服器上刪除檔案 boolean b = FtpUtil。deleteFile(“/”+remotePath, fileName); if (b){ //刪除成功,返回空間 fileStoreService。subSize(myFile。getFileStoreId(),Integer。valueOf(myFile。getSize())); //刪除檔案表對應的資料 myFileService。deleteByFileId(fId); } logger。info(“刪除檔案成功!”+myFile); return “redirect:/files?fId=”+folder; } /** * @Description 刪除資料夾並清空檔案 **/ @GetMapping(“/deleteFolder”) public String deleteFolder(@RequestParam Integer fId){ FileFolder folder = fileFolderService。getFileFolderByFileFolderId(fId); //強制刪除 deleteFolderF(folder); return folder。getParentFolderId() == 0?“redirect:/files”:“redirect:/files?fId=”+folder。getParentFolderId(); } /** * @Description 迭代刪除資料夾裡面的所有檔案和子資料夾 **/ public void deleteFolderF(FileFolder folder){ //獲得當前資料夾下的所有子資料夾 List folders = fileFolderService。getFileFolderByParentFolderId(folder。getFileFolderId()); //刪除當前資料夾的所有的檔案 List files = myFileService。getFilesByParentFolderId(folder。getFileFolderId()); if (files。size()!=0){ for (int i = 0; i < files。size(); i++) { Integer fileId = files。get(i)。getMyFileId(); boolean b = FtpUtil。deleteFile(“/”+files。get(i)。getMyFilePath(), files。get(i)。getMyFileName() + files。get(i)。getPostfix()); if (b){ myFileService。deleteByFileId(fileId); fileStoreService。subSize(folder。getFileStoreId(),Integer。valueOf(files。get(i)。getSize())); } } } if (folders。size()!=0){ for (int i = 0; i < folders。size(); i++) { deleteFolderF(folders。get(i)); } } fileFolderService。deleteFileFolderById(folder。getFileFolderId()); } /** * @Description 新增資料夾 **/ @PostMapping(“/addFolder”) public String addFolder(FileFolder folder,Map map) { //設定資料夾資訊 folder。setFileStoreId(loginUser。getFileStoreId()); folder。setTime(new Date()); //獲得當前目錄下的所有資料夾,檢查當前資料夾是否已經存在 List fileFolders = null; if (folder。getParentFolderId() == 0){ //向用戶根目錄新增資料夾 fileFolders = fileFolderService。getRootFoldersByFileStoreId(loginUser。getFileStoreId()); }else{ //向用戶的其他目錄新增資料夾 fileFolders = fileFolderService。getFileFolderByParentFolderId(folder。getParentFolderId()); } for (int i = 0; i < fileFolders。size(); i++) { FileFolder fileFolder = fileFolders。get(i); if (fileFolder。getFileFolderName()。equals(folder。getFileFolderName())){ logger。info(“新增資料夾失敗!資料夾已存在。。。”); return “redirect:/files?error=1&fId=”+folder。getParentFolderId(); } } //向資料庫寫入資料 Integer integer = fileFolderService。addFileFolder(folder); logger。info(“新增資料夾成功!”+folder); return “redirect:/files?fId=”+folder。getParentFolderId(); } /** * @Description 重新命名資料夾 **/ @PostMapping(“/updateFolder”) public String updateFolder(FileFolder folder,Map map) { //獲得資料夾的資料庫資訊 FileFolder fileFolder = fileFolderService。getFileFolderByFileFolderId(folder。getFileFolderId()); fileFolder。setFileFolderName(folder。getFileFolderName()); //獲得當前目錄下的所有資料夾,用於檢查資料夾是否已經存在 List fileFolders = fileFolderService。getFileFolderByParentFolderId(fileFolder。getParentFolderId()); for (int i = 0; i < fileFolders。size(); i++) { FileFolder folder1 = fileFolders。get(i); if (folder1。getFileFolderName()。equals(folder。getFileFolderName()) && folder1。getFileFolderId() != folder。getFileFolderId()){ logger。info(“重新命名資料夾失敗!資料夾已存在。。。”); return “redirect:/files?error=2&fId=”+fileFolder。getParentFolderId(); } } //向資料庫寫入資料 Integer integer = fileFolderService。updateFileFolderById(fileFolder); logger。info(“重新命名資料夾成功!”+folder); return “redirect:/files?fId=”+fileFolder。getParentFolderId(); } /** * @Description 重新命名檔案 **/ @PostMapping(“/updateFileName”) public String updateFileName(MyFile file,Map map) { MyFile myFile = myFileService。getFileByFileId(file。getMyFileId()); if (myFile != null){ String oldName = myFile。getMyFileName(); String newName = file。getMyFileName(); if (!oldName。equals(newName)){ boolean b = FtpUtil。reNameFile(myFile。getMyFilePath() + “/” + oldName+myFile。getPostfix(), myFile。getMyFilePath() + “/” + newName+myFile。getPostfix()); if (b){ Integer integer = myFileService。updateFile( MyFile。builder()。myFileId(myFile。getMyFileId())。myFileName(newName)。build()); if (integer == 1){ logger。info(“修改檔名成功!原檔名:”+oldName+“ 新檔名:”+newName); }else{ logger。error(“修改檔名失敗!原檔名:”+oldName+“ 新檔名:”+newName); } } } } return “redirect:/files?fId=”+myFile。getParentFolderId(); } /** * @Description 獲得二維碼 **/ @GetMapping(“getQrCode”) @ResponseBody public Map getQrCode(@RequestParam Integer id,@RequestParam String url){ Map map = new HashMap<>(); map。put(“imgPath”,“https://ss3。bdstatic。com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2654852821,3851565636&fm=26&gp=0。jpg”); if (id != null){ MyFile file = myFileService。getFileByFileId(id); if (file != null){ try { String path = request。getSession()。getServletContext()。getRealPath(“/user_img/”); url = url+“/file/share?t=”+ UUID。randomUUID()。toString()。substring(0,10) +“&f=”+file。getMyFileId()+“&p=”+file。getUploadTime()。getTime()+“”+file。getSize()+“&flag=1”; File targetFile = new File(path, “”); if (!targetFile。exists()) { targetFile。mkdirs(); } File f = new File(path, id + “。jpg”); if (!f。exists()){ //檔案不存在,開始生成二維碼並儲存檔案 OutputStream os = new FileOutputStream(f); QRCodeUtil。encode(url, “/static/img/logo。png”, os, true); os。close(); } map。put(“imgPath”,“user_img/”+id+“。jpg”); map。put(“url”,url); } catch (Exception e) { e。printStackTrace(); } } } return map; } /** * @Description 分享檔案 **/ @GetMapping(“/file/share”) public String shareFile(Integer f,String p,String t,Integer flag){ String fileNameTemp = “”; String remotePath = “”; String fileName = “”; Integer times = 0; if (flag == null || f == null || p == null || t == null){ logger。info(“下載分享檔案失敗,引數錯誤”); return “redirect:/error400Page”; } if(flag == 1){ //獲取檔案資訊 MyFile myFile = myFileService。getFileByFileId(f); if (myFile == null){ return “redirect:/error404Page”; } String pwd = myFile。getUploadTime()。getTime()+“”+myFile。getSize(); if (!pwd。equals(p)){ return “redirect:/error400Page”; } remotePath = myFile。getMyFilePath(); fileName = myFile。getMyFileName()+myFile。getPostfix(); }else if(flag == 2){ TempFile tempFile = tempFileService。queryById(f); if (tempFile == null){ return “redirect:/error404Page”; } Long test = tempFile。getUploadTime()。getTime(); String pwd = tempFile。getSize(); if (!pwd。equals(p)){ return “redirect:/error400Page”; } remotePath = tempFile。getFilePath(); fileName = tempFile。getFileName(); }else { return “redirect:/error400Page”; } fileNameTemp = fileName; try { //解決下載檔案時 中文檔名亂碼問題 boolean isMSIE = isMSBrowser(request); if (isMSIE) { //IE瀏覽器的亂碼問題解決 fileNameTemp = URLEncoder。encode(fileNameTemp, “UTF-8”); } else { //萬能亂碼問題解決 fileNameTemp = new String(fileNameTemp。getBytes(“UTF-8”), “ISO-8859-1”); } //去FTP上拉取 OutputStream os = new BufferedOutputStream(response。getOutputStream()); response。setCharacterEncoding(“utf-8”); // 設定返回型別 response。setContentType(“multipart/form-data”); // 檔名轉碼一下,不然會出現中文亂碼 response。setHeader(“Content-Disposition”, “attachment;fileName=” + fileNameTemp); if (FtpUtil。downloadFile(“/” + remotePath, fileName, os)) { myFileService。updateFile( MyFile。builder()。myFileId(f)。downloadTime(times + 1)。build()); os。flush(); os。close(); logger。info(“檔案下載成功!”); } } catch (Exception e) { e。printStackTrace(); } return “success”; } /** * @Description 根據檔案的字尾名獲得對應的型別 * @Param [type] * @return int 1:文字型別 2:影象型別 3:影片型別 4:音樂型別 5:其他型別 **/ public int getType(String type){ if (“。chm”。equals(type)||“。txt”。equals(type)||“。xmind”。equals(type)||“。xlsx”。equals(type)||“。md”。equals(type) ||“。doc”。equals(type)||“。docx”。equals(type)||“。pptx”。equals(type) ||“。wps”。equals(type)||“。word”。equals(type)||“。html”。equals(type)||“。pdf”。equals(type)){ return 1; }else if (“。bmp”。equals(type)||“。gif”。equals(type)||“。jpg”。equals(type)||“。ico”。equals(type)||“。vsd”。equals(type) ||“。pic”。equals(type)||“。png”。equals(type)||“。jepg”。equals(type)||“。jpeg”。equals(type)||“。webp”。equals(type) ||“。svg”。equals(type)){ return 2; } else if (“。avi”。equals(type)||“。mov”。equals(type)||“。qt”。equals(type) ||“。asf”。equals(type)||“。rm”。equals(type)||“。navi”。equals(type)||“。wav”。equals(type) ||“。mp4”。equals(type)||“。mkv”。equals(type)||“。webm”。equals(type)){ return 3; } else if (“。mp3”。equals(type)||“。wma”。equals(type)){ return 4; } else { return 5; } } /** * @Description 正則驗證檔名是否合法 [漢字,字元,數字,下劃線,英文句號,橫線] * @return boolean **/ public boolean checkTarget(String target) { final String format = “[^\\u4E00-\\u9FA5\\uF900-\\uFA2D\\w-_。]”; Pattern pattern = Pattern。compile(format); Matcher matcher = pattern。matcher(target); return !matcher。find(); } /** * @Description 判斷當前瀏覽器是否為ie * @return boolean **/ public static boolean isMSBrowser(HttpServletRequest request) { String[] IEBrowserSignals = {“MSIE”, “Trident”, “Edge”}; String userAgent = request。getHeader(“User-Agent”); for (String signal : IEBrowserSignals) { if (userAgent。contains(signal)){ return true; } } return false; }}

控制器的基類:

package com。moti。controller;import com。moti。entity。User;import com。moti。service。*;import com。moti。utils。MailUtils;import org。springframework。beans。factory。annotation。Autowired;import org。springframework。mail。javamail。JavaMailSenderImpl;import org。springframework。web。bind。annotation。ModelAttribute;import javax。servlet。http。HttpServletRequest;import javax。servlet。http。HttpServletResponse;import javax。servlet。http。HttpSession;/** * @ClassName: BaseController * @Description: 控制器的基類,所有控制器必須繼承此類 **/public class BaseController { @Autowired protected UserService userService; @Autowired protected MyFileService myFileService; @Autowired protected FileFolderService fileFolderService; @Autowired protected FileStoreService fileStoreService; @Autowired protected TempFileService tempFileService; protected HttpServletRequest request; protected HttpServletResponse response; protected HttpSession session; protected User loginUser; @Autowired protected JavaMailSenderImpl mailSender; protected MailUtils mailUtils; /** * 在每個子類方法呼叫之前先呼叫 * 設定request,response,session這三個物件 * * @param request * @param response */ @ModelAttribute public void setReqAndRes(HttpServletRequest request, HttpServletResponse response) { this。request = request; this。response = response; this。session = request。getSession(true); loginUser = (User) session。getAttribute(“loginUser”); }}

,https://blog。csdn。net/m0_59687645/article/details/121727048