国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【springboot項(xiàng)目開發(fā)】文件上傳與下載

這篇具有很好參考價(jià)值的文章主要介紹了【springboot項(xiàng)目開發(fā)】文件上傳與下載。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

總體介紹

文件上傳

介紹

文件上傳的前端需求

文件上傳的前端代碼

文件上傳的后端需求

文件上傳的后端代碼

文件下載

介紹

前端需求

前端代碼

后端需求

后端代碼


總體介紹

文件的上傳和下載功能,是項(xiàng)目開發(fā)過程中比較常見的業(yè)務(wù)需求,我們?cè)诳蛻舳吮徽宫F(xiàn)的視覺效果通過如下:在項(xiàng)目前端頁面的提示下將本地文件加入到瀏覽器的具體位置,之后瀏覽器直接將這個(gè)圖片回顯了,具體效果如下:

【springboot項(xiàng)目開發(fā)】文件上傳與下載

?但是在我們視覺效果下的上傳文件并非單一的文件上傳過程:而是由文件的上傳和下載兩部分組成,即文件從客戶端本地上傳到服務(wù)器和由服務(wù)器把文件在瀏覽器進(jìn)行回顯(下載到服務(wù)器中),接下來我們對(duì)兩個(gè)過程進(jìn)行具體介紹

文件上傳

介紹

文件上傳,也稱為上傳,是指將本地圖片、視頻、音頻等文件上傳到服務(wù)器上,可以供其他用戶瀏覽或下載的過程.文件上傳在項(xiàng)目中應(yīng)用非常廣泛,我們經(jīng)常發(fā)微博、發(fā)微信朋友圈都用到了文件上傳功能.

文件上傳的前端需求

【springboot項(xiàng)目開發(fā)】文件上傳與下載

?但是在實(shí)際的開發(fā)過程中,前端頁面有關(guān)這一部分的設(shè)計(jì)通常是使用組件進(jìn)行封裝,例如使用element-ui在完成功能實(shí)現(xiàn)的基礎(chǔ)上實(shí)現(xiàn)了對(duì)上傳組件頁面設(shè)計(jì)的優(yōu)化。(底層仍然是使用post表單的方式進(jìn)行發(fā)送請(qǐng)求)

如下:

【springboot項(xiàng)目開發(fā)】文件上傳與下載

文件上傳的前端代碼

具體實(shí)現(xiàn)上傳功能的element-ui的代碼如下:
?

 <div class="addBrand-container" id="food-add-app">
    <div class="container">
        <el-upload class="avatar-uploader"
                action="/common/upload"
                :show-file-list="false"
                :on-success="handleAvatarSuccess"
                :before-upload="beforeUpload"
                ref="upload">
            <img v-if="imageUrl" :src="imageUrl" class="avatar"></img>
            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
        </el-upload>
    </div>
  </div>

文件上傳的后端需求

服務(wù)端要接收客戶端頁面上傳的文件,通常都會(huì)使用Apache的兩個(gè)組件:

  • commons-fileupload
  • commons-io

Spring框架在spring-web包中對(duì)文件上傳進(jìn)行了封裝,大大簡(jiǎn)化了服務(wù)端代碼,我們只需要在Controller的方法中聲明一個(gè)MultipartFile類型的參數(shù)即可接收上傳的文件,例如:

【springboot項(xiàng)目開發(fā)】文件上傳與下載

關(guān)于對(duì)于文件上傳的后端實(shí)現(xiàn)邏輯,一般是如下的實(shí)現(xiàn)思路:

1.首先使用MultipartFile類的形參接收客戶端傳來的文件,我們需要注意的是:MultipartFile類對(duì)象接收到文件之后,會(huì)對(duì)文件進(jìn)行一個(gè)暫存,生成一個(gè)臨時(shí)文件,當(dāng)我們結(jié)束此次傳輸過程之后,無論是否對(duì)文件進(jìn)行了轉(zhuǎn)存,這個(gè)臨時(shí)文件都會(huì)消失,

【springboot項(xiàng)目開發(fā)】文件上傳與下載

2.因此我們下一步的操作就是對(duì)這個(gè)暫時(shí)文件進(jìn)行轉(zhuǎn)存,因?yàn)槲募D(zhuǎn)存過程中必然會(huì)涉及到文件名的問題,如果使用原有文件的文件名可能會(huì)存在文件名重復(fù)的問題,因此在原來的基礎(chǔ)上生成一個(gè)新的隨機(jī)文件名,以新的文件名進(jìn)行轉(zhuǎn)存,

2.最后一定要記得返回我們新生成的那個(gè)文件名,因?yàn)閡pload只是將文件上傳到服務(wù)器了,后面還涉及一次將文件在瀏覽器上進(jìn)行回顯的工作,需要使用到這個(gè)文件名

我們給出文件上傳的后端代碼實(shí)現(xiàn):

文件上傳的后端代碼

我們通過使用@Value注解從配置文件中讀取文件保存路徑:
?

 @Value("${reggie.path}")
    private String path;
reggie:
  path: D:\img\
 @PostMapping("/upload")
    public R<String>upload(MultipartFile file){
        log.info(file.toString());
        //獲取原始文件名,提取JPG
        String originalFilename = file.getOriginalFilename();
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        //生成隨機(jī)文件名
        String random=UUID.randomUUID().toString();
        //獲取新名稱
        String fileName=random+suffix;
        //創(chuàng)建新名稱
        File file1 = new File(path);
        if(!file1.exists()){
            file1.mkdirs();
        }
        //進(jìn)行轉(zhuǎn)存
        try {
            log.info("文件路徑為"+path+fileName);
            file.transferTo(new File(path+fileName));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return R.success(fileName);
    }

notes:關(guān)于MultipartFile類對(duì)象名:這個(gè)對(duì)象名必須與前端傳來的對(duì)象名保持一致,也就是說是前后端的交互是以對(duì)象名進(jìn)行匹配的,如果對(duì)象名不一致,傳到后端的MultipartFile文件對(duì)象就是一個(gè)空對(duì)象了,具體演示如下:

【springboot項(xiàng)目開發(fā)】文件上傳與下載

【springboot項(xiàng)目開發(fā)】文件上傳與下載

文件下載

介紹

文件下載,也被稱為download,是指將文件從服務(wù)器傳到本地計(jì)算機(jī)的過程

通過瀏覽器進(jìn)行文件下載,通常有兩種表現(xiàn)形式:

  • 以附件形式進(jìn)行下載,彈出保存對(duì)話框,將文件保存到指定的磁盤目錄
  • 直接在瀏覽器中打開

通過瀏覽器進(jìn)行文件下載,本質(zhì)上就是服務(wù)端將文件以流的形式協(xié)會(huì)到瀏覽器的過程

前端需求

想要實(shí)現(xiàn)完整圖片回顯的功能,下載之前必須要完成上傳功能,并且要拿到需要回顯文件的文件名,所以前端的需求就是根據(jù)upload響應(yīng)返回的文件名向服務(wù)端發(fā)送新的請(qǐng)求獲取文件信息,以此進(jìn)行照片信息的回顯,代碼實(shí)例和具體的請(qǐng)求url如下

代碼示例:

【springboot項(xiàng)目開發(fā)】文件上傳與下載

【springboot項(xiàng)目開發(fā)】文件上傳與下載

url展示:我們可以發(fā)現(xiàn),download的url中包含了具體圖片的文件名

【springboot項(xiàng)目開發(fā)】文件上傳與下載

前端代碼

具體的前端代碼如下:

  methods: {
          handleAvatarSuccess (response, file, fileList) {
              this.imageUrl = `/common/download?name=${response.data}`
          },
          beforeUpload (file) {
            if(file){
              const suffix = file.name.split('.')[1]
              const size = file.size / 1024 / 1024 < 2
              if(['png','jpeg','jpg'].indexOf(suffix) < 0){
                this.$message.error('上傳圖片只支持 png、jpeg、jpg 格式!')
                this.$refs.upload.clearFiles()
                return false
              }
              if(!size){
                this.$message.error('上傳文件大小不能超過 2MB!')
                return false
              }
              return file
            }
          }
        }

后端需求

后端接收到前端傳來的文件名,根據(jù)文件路徑和文件名創(chuàng)建FileInputStream對(duì)象,利用response對(duì)象創(chuàng)建ServletOutputStream對(duì)象,從FileInputStream文件中讀取數(shù)據(jù)并通過數(shù)組寫入ServletOutputStream對(duì)象,最后記得一定要關(guān)閉流資源

后端代碼

?后端代碼如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-474430.html

 @GetMapping("/download")
    public void downLoad(String name, HttpServletResponse response){
        //輸入流,通過提供指定位置去讀取數(shù)據(jù)
        try {
            FileInputStream fileInputStream = new FileInputStream(new File(path + name));
            //輸出流,通過讀取到的數(shù)據(jù)輸出到瀏覽器中
            ServletOutputStream outputStream = response.getOutputStream();
            response.setContentType("image/jpeg");
            //將數(shù)據(jù)通過byte字符數(shù)組進(jìn)行讀取
            int len=0;
            byte[]bytes=new byte[1024];
            while((len=fileInputStream.read(bytes))!=-1){
                outputStream.write(bytes,0,len);
                //刷新
                outputStream.flush();
            }
            fileInputStream.close();
            outputStream.close();
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }


    }

到了這里,關(guān)于【springboot項(xiàng)目開發(fā)】文件上傳與下載的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包