天天看點

線上問題回報子產品實戰(十二)​:實作圖檔删除功能

👨‍🎓作者:bug菌

✏️部落格:CSDN​、掘金等

💌公衆号:​​猿圈奇妙屋​​

🚫特别聲明:原創不易,轉載請附上原文出處連結和本文聲明,謝謝配合。

🙏版權聲明:文章裡可能部分文字或者圖檔來源于網際網路或者百度百科,如有侵權請聯系bug菌處理。

一、概述🔥

       接下來的這幾期,bug菌想跟大家分享一下自己昨天剛接到一個臨時的需求,熱乎着呢,想分享一下自己是如何面對臨時需求并制定整個開發周期,其中包括從梳理業務到建立業務表再到實作業務邏輯形成閉環再到與前端對接,其中會穿插一些業務拓展及功能性拓展,這一條龍流程線上與大家一起見證,分享給剛入門的小夥伴,希望對你們有所幫助。

環境說明:idea2019.3 + springboot2.3.1.REALSE + mybati-plus3.2.0 + mysql5.6 + jdk1.8

       若小夥伴們在批閱文章的過程中覺得文章對您有一絲絲幫助,還請别吝啬您手裡的贊呀,大膽的把文章點亮👍吧,您的點贊三連(收藏⭐️+關注👨‍🎓+留言📃)就是對bug菌我創作道路上最好的鼓勵與支援😘。時光不棄🏃🏻‍♀️,創作不停💕,加油☘️ 

二、正文🔥

        這一期,我接着還是圍繞圖檔為準,既然要教學,那就要把圖檔的增删改查一環不落的都講述完畢。這樣對于日後的你們而言,如果有遇到涉及圖檔相關的業務,那你們便毫無壓力,直接按照我這一套教程,我手把手的教你,這肯定是最快且最優的零基礎入門教學了,說不定還能得到上司的大賞識,工作嘛,不就圖個代碼安全且工作高效,能早些下班,盡量在工作時間内完成當天的工作量,這是所有人奮鬥的目标,是你的也是我的,我們一起加油!好不好?

        咱們就廢話不多說,直接開始今天的内容。

三、如何代碼實作圖檔删除🔥

        說起這幾期的内容,圖檔的增删改查,唯獨現在就剩圖檔删除沒有說了,其他仨個功能點我們都在前幾期講過了,比如圖檔上傳、圖檔下載下傳、圖檔線上預覽,而這一期,我們就來完結它,把剩下對圖檔的指定删除功能給實作咯。這一塊圖檔業務也就做到閉環了,既能上傳伺服器就能删伺服器的圖檔資源,對吧。

        談及這些小功能點,雖然說都不是啥跟業務有啥直接關聯的,但是一旦涉及到圖檔資源等業務場景,這圖檔的增删改查必不可少,是以說,我是一字一句的将這些小功能點的給大家講一遍,希望日後對你們在座的各位有遇到該業務的,能有所幫助即可。

        廢話不多說,咱們就開始今天的教學内容。

1️⃣定義Controller請求

        我們還是老套路,先定義好請求接口吧,功能點是圖檔删除,需要那些參數?根據業務分析一波即可得出,我就按我實際業務場景給大家講一下啊。比如我這業務場景是,使用者可以對自己的問題回報進行編輯,同時是能對其附件圖檔手動删除的,那麼也就說既可編輯普通字段内容,也能移除附件圖檔,那我就将這個點分開,圖檔要移除直接調用接口1,回報問題編輯調用接口2,對吧,這樣就不需要把該業務規整成當時的問題回報時一并儲存那樣的複雜業務邏輯了。

        so,我們接下來啊,直接撸代碼吧!

@GetMapping("/delete-img-by-path")
    @ApiOperation(value = "圖檔删除", notes = "根據圖檔位址進行圖檔删除")
    public ResultResponse<Boolean> deleteImgByPath(@ApiParam("圖檔路徑") @RequestParam("imgPath") String imgPath,
                                                   @ApiParam("回報人的域賬号id") @RequestParam("accountId") String accountId,
                                                   @ApiParam("該條資料的主鍵id") @RequestParam("id") {
        return      

2️⃣定義接口deleteImgByPath()

        接着就是定義該deleteImgByPath() 接口了。具體實作代碼如下:

ResultResponse<Boolean> deleteImgByPath(String imgPath, String accountId,String id);      

3️⃣實作deleteImgByPath()方法

        這裡就是涉及圖檔删除重點了,看過我圖檔批量儲存的邏輯就應該知道,資料中filePaths字段是按多圖檔路徑以逗号隔開儲存的,是以對于需要移除filePaths中的某一個路徑,那我們就要對該路徑進行一個剔除指定要移除的那個路徑且再更新該條記錄,也就是将移除後的路徑重新回寫到記錄中去。

        是以,我們寫該方法,第一:更新移除後的路徑位址,第二:移除伺服器檔案。運作第二步的前提是第一步必須是成功之後的,因為第一步是更容易出錯的,而對于第二步就算移除失敗,也可以日後在進行無用資源進行一個定時掃描清理掉,就算删除檔案失敗,也就是占用一點伺服器記憶體資源而已,并不會影響啥,因為使用者更希望移除能成功,是以送出移除成功率,我們就是先更新路徑,後移除實體檔案。

        那我就帶着你們大家一起來實作該方法了。

@Override
    public ResultResponse<Boolean> deleteImgByPath(String imgPath, String accountId, String id) {

        //先查詢這條資料
        UserQuestionsEntity entity = this.getById(id);
        if (Objects.isNull(entity)) {
            return new ResultResponse<>(ErrorCodeEnum.DATA_NOT_EXIST);
        }

        //去除被删除的該路徑
        String filePaths = entity.getFilePaths();
        if (StringUtils.isBlank(filePaths)) {
            return new ResultResponse<>(ErrorCodeEnum.FILE_NOT_FIND);
        }
        //轉成str數組
        String[] paths = filePaths.split(ConstantUtils.COMMA);
        //移除要删除的檔案路徑

        //先判斷目标路徑是否在指定集合中
        boolean isExist = ReviewStringUtils.isExist(paths, imgPath);
        if (!isExist) {
            return new ResultResponse<>(ErrorCodeEnum.FILE_NOT_FIND);
        }
        String pathStr = ReviewStringUtils.removeStr(paths, imgPath);

        //更新移除圖檔後的圖檔路徑
        entity.setFilePaths(pathStr);

        //更新資料
        boolean success = this.updateById(entity);

        //更新成功則進行檔案移除
        if (success) {

            //指定删除目标全路徑
            String targetPath = this.buildImgPath(imgPath, accountId);
            uploader.removeFile(new File(targetPath));
            return new ResultResponse<>(success);
        }
        return new ResultResponse<>(ErrorCodeEnum.DELETE_IMAGE_ERROR);
    }      

解釋一下,對于filePaths字段,我們直接可以用split以逗号進行分割轉成一個路徑數組,然後從數組中去比對是否有目标路徑,再選擇傳回對于的一些業務判斷,比如檔案是否存在等情況。

4️⃣實作圖檔deleteImgByPath()删除方法

        對于該removeFile()方法, 這裡就比較簡單了,可以直接通過使用file所提供的delete()方法,就能有效實作對該圖檔資源進行徹底删除。這點還是非常便捷且有利的。

public Boolean removeFile(File file) {

        //直接删除
        return      

5️⃣接口測試

        至于上述接口都定義且實作好了,是以對于目前剩餘要做的事情就是,單元測試+接口測試。我們比較關心的還是對于該功能點是否能真正滿足業務需求,如果無法到達業務需要,那我們就要進行修改或者重寫,都有可能,是以我們在寫完一個接口的同時,一定要做好測試,别讓其他同僚比如測試人員、前端人員創造多餘的工作量。

        我們直接可通過線上swagger文檔或者postman進行該接口調試。

postman測試檔案删除接口

這是我可以傳的一條不存在的檔案路徑,删除肯定是直接傳回自定義的msg。

線上問題回報子產品實戰(十二)​:實作圖檔删除功能

我給予一個存在的路徑位址,進行圖檔删除。示範結果如下:

線上問題回報子產品實戰(十二)​:實作圖檔删除功能

至于swagger文檔,也是一樣的操作示範,我這就不給大家一一示範了哈。不清楚的可以評論區問,我看見了一定第一時間解答。

6️⃣總結

        相對而言,還是一步到位,沒遇到什麼bug,這個實測功能可用,大家可以放心copy哈。

 ... ...

        好啦,以上就是這期的所有内容啦,你們學廢了麼?如果對你有所幫助,還請不要忘記給bug菌[三連支援]喲。如果想獲得更多的學習資源或者想和更多的技術愛好者一起交流,可以關注我的公衆号『​​猿圈奇妙屋​​』,背景回複關鍵詞領取學習資料、大廠面經、面試模闆等海量資源,就等你來拿。

四、往期熱文推薦🔥

        對于問題回報子產品實戰開發,我完整的梳理了每一期的教學及連結位址,僅供參考:希望能對你們有所幫助。

  • 線上問題回報子產品實戰(一):梳理業務需求并建立資料庫表
  • 線上問題回報子產品實戰(二):封裝代碼自動生成類檔案器
  • 線上問題回報子產品實戰(三):自動生成所有Controller、Service、Mapper等檔案
  • 線上問題回報子產品實戰(四):封裝通用字段類
  • 線上問題回報子產品實戰(五):實作對通用字段内容自動填充功能
  • 線上問題回報子產品實戰(六):接口文檔定義
  • 線上問題回報子產品實戰(七):安裝部署swagger2
  • 線上問題回報子產品實戰(八):實作圖檔上傳功能-上篇
  • 線上問題回報子產品實戰(九):實作圖檔上傳功能-下篇
  • 線上問題回報子產品實戰(十):實作圖檔預覽功能
  • 線上問題回報子產品實戰(十一):實作圖檔下載下傳功能
  • 線上問題回報子產品實戰(十二):實作圖檔删除功能
  • 線上問題回報子產品實戰(十三):實作多參數分頁查詢清單
  • 線上問題回報子產品實戰(十四):實作線上答疑功能
  • 線上問題回報子產品實戰(十五):實作線上更新回報狀态功能
  • 線上問題回報子產品實戰(十六):實作查詳情功能
  • 線上問題回報子產品實戰(十七):實作excel模闆線上下載下傳功能
  • 線上問題回報子產品實戰(十八):實作excel台賬檔案記錄批量導入功能
  • 線上問題回報子產品實戰(十九):實作資料批量導出到excel檔案中功能
  • 線上問題回報子產品實戰(二十):實作檔案批量導出到zip壓縮包中功能
  • 線上問題回報子產品實戰(二十一):完結篇

        如上是整整二十期内容,每一期都是幹貨,對于一個子產品的開發,如何一點一滴打造并測試部署上線,我再說一遍,這不是演習,是實戰!是實戰!是實戰!

        若你們覺得隻是需要了解其中某個知識點或者業務的話,也不反對,你就選擇其中的幾期進行學習就好,反正都已經完結啦;我隻希望你們能有所收獲,有所成長,也就不枉我苦心每天下班後給大家總結更新。

五、文末🔥

《springboot零基礎入門教學》,都是我一手打下的江山,持續更新中,希望能幫助到更多小夥伴們。

       我是bug菌,一名想走👣出大山改變命運的程式猿。接下來的路還很長,都等待着我們去突破、去挑戰。來吧,小夥伴們,我們一起加油!未來皆可期,fighting!

        最後送大家兩句我很喜歡的話,與諸君共勉!

☘️做你想做的人,沒有時間限制,隻要願意,什麼時候都可以start。

🍀你能從現在開始改變,也可以一成不變,這件事,沒有規矩可言,你可以活出最精彩的自己。

線上問題回報子產品實戰(十二)​:實作圖檔删除功能

💌如果文章對您有所幫助,就請留下您的贊吧!(#^.^#);

💝如果喜歡bug菌分享的文章,就請給bug菌點個關注吧!(๑′ᴗ‵๑)づ╭❤~;

💗如果對文章有任何疑問,還請文末留言或者加群吧【QQ交流群:708072830】;