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

前后端分離架構(gòu)文件上傳與下載(含Vue?+?Spring完整代碼)

這篇具有很好參考價值的文章主要介紹了前后端分離架構(gòu)文件上傳與下載(含Vue?+?Spring完整代碼)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、前言

本文采用前后端分離式的架構(gòu),其中涉及到文件下載的需求,文件下載在任何系統(tǒng)中都是比較常見的。對于前后端分離架構(gòu)的文件下載與往常的寫法有些許不同(試過直接使用a標(biāo)簽,href填上下載地址,發(fā)現(xiàn)行不通),所以經(jīng)過查找與嘗試,以下文件下載前后端實(shí)現(xiàn)流程供大家參考。

二、準(zhǔn)備

前端:vue + ViewUI

后端:springboot

三、文件下載

1、準(zhǔn)備一個文件下載接口,返回文件流

@GetMapping("/download")
public void downloadFile(HttpServletResponse response) {
? ? // 讀取resource目下文件
? ? String templatePath = "classpath:file/test.txt";
? ? String filename = " test.txt ";

? ? File file = null;
? ? try {
    ? ? file = ResourceUtils.getFile(templatePath);
? ? } catch (FileNotFoundException e) {
    ? ? log.warn("文件不存在 {}", filename);
? ? ? ? //?todo,?可以在流中返回“文件不存在“,這樣用戶可以下載到文件,但是內(nèi)容為”文件不存在”
    ? ? return;
? ? }

? ? if (file.isFile()) {
    ? ? byte[] fileNameBytes = filename.getBytes(StandardCharsets.UTF_8);
    ? ? filename = new String(fileNameBytes, 0, fileNameBytes.length, StandardCharsets.ISO_8859_1);
    
    ? ? response.reset();
    ? ? response.setContentType("application/force-download");
    ? ? response.setCharacterEncoding("utf-8");
    ? ? response.setContentLength((int) file.length());
    ? ? response.setHeader("Content-Disposition", "attachment;filename=" + filename);
    
    ? ? try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {
        ? ? byte[] buff = new byte[1024];
        ? ? OutputStream os = response.getOutputStream();
        ? ? int i;
        ? ? while ((i = bis.read(buff)) != -1) {
            ? ? os.write(buff, 0, i);
            ? ? os.flush();
        ? ? }
    ? ? } catch (IOException e) {
        ? ? log.error("下載出錯 {},錯誤原因 {}", filename, e.getMessage());
    ? ? }
? ? } else {
    ? ? log.warn("文件不存在 {}", filename);
? ? ? ? // todo, 可以在流中返回“文件不存在“,這樣用戶可以下載到文件,但是內(nèi)容為”文件不存在”
? ? }
}

2、前端定義一個button標(biāo)簽,通過點(diǎn)擊按鈕實(shí)現(xiàn)文件下載

<Button type="text" @click.stop.prevent="downloadFile">下載</Button>

3、下載按鈕點(diǎn)擊事件

downloadFile (){
? ? let downloadUrl = "/download"

? ? axios({
? ? ? ? url: downloadUrl,
? ? ? ? method: 'get',
? ? ? ? responseType: 'arraybuffer'
? ? }).then(res => {
? ? ? ? const blob = new Blob([res.data]);
? ? ? ? //創(chuàng)建一個<a></a>標(biāo)簽
? ? ? ? let a = document.createElement("a");
? ? ? ? // 將流文件寫入a標(biāo)簽的href屬性值
? ? ? ? a.href = URL.createObjectURL(blob);
? ? ? ? //設(shè)置文件名
? ? ? ? a.download = "template.py";
? ? ? ? // 隱藏a標(biāo)簽
? ? ? ? a.style.display = "none";
? ? ? ? // 將a標(biāo)簽追加到文檔對象中
? ? ? ? document.body.appendChild(a); 
? ? ? ? // 模擬點(diǎn)擊了a標(biāo)簽,會觸發(fā)a標(biāo)簽的href的讀取,瀏覽器就會自動下載了
? ? ? ? a.click();
? ? ? ? //用完就刪除a標(biāo)簽
? ? ? ? a.remove();
? ? })
}

通過以上的做法,就能夠在前后端分離架構(gòu)中實(shí)現(xiàn)文件下載啦!

四、文件上傳

1、后端準(zhǔn)備一個上傳文件接口

@PostMapping("/upload")
public Boolean uploadFile(FileVO fileVO) throws Exception {
    String location = "D:\\file";
    String user = "001";
? ? // 創(chuàng)建存放文件目錄,一個用戶一個目錄
    File dir = Paths.get(location, user).toFile();
    if (!dir.isDirectory()) {
        boolean mkdirs = dir.mkdirs();
        if (!mkdirs) {
            log.error("腳本文件保存目錄創(chuàng)建失敗,目錄:{}", dir);
            return false;
    ? ? }

? ? ? ? // 保存腳本文件
? ? ? ? MultipartFile file = fileVO.getFile();
? ? ? ? try {
   ? ? ? ?  file.transferTo(Paths.get(location, user,       file.getOriginalFilename()));
? ? ? ? } catch (Exception e) {
    ? ? ? ? log.error("腳本文件: {} 保存失敗,錯誤原因: {}", file.getOriginalFilename(), e.getMessage());
    ? ? ? ? return false;
? ? ? ? }
? ? ? ? return true;
? ? }
}
public class ScriptVO {

    /**
     *文件
     */
    private MultipartFile file;

}

2、定義一個上傳標(biāo)簽,通過點(diǎn)擊按鈕實(shí)現(xiàn)文件上傳(如果不是使用ViewUI,那么請使用對應(yīng)前端框架提供的標(biāo)簽)

<div>
? ? <Upload
? ? ? ? :before-upload="handleUpload"
? ? ? ? type="drag">
? ? ? ? <div style="padding: 20px 0">
? ? ? ? <Icon type="ios-cloud-upload" size="52" style="color: #3399ff"></Icon>
? ? ? ? ? ? <p>點(diǎn)擊或拖拽選擇Python腳本文件</p>
? ? ? ? </div>
? ? </Upload>
</div>
<div>
? ? <Button
? ? ? ? type="primary"
? ? ? ? style="margin-left: 8px;"
? ? ? ? @click="submit"
? ? >確認(rèn)</Button>
</div>

3、上傳按鈕點(diǎn)擊事件

handleUpload (file) {
? ? this.uploadFile = file;
? ? return false;
},
submit(){
? ? const formData = new FormData();
? ? formData.append("file", uploadFile);
? ? axios.post('/upload',formData,{
? ? ? ? 'Content-type' : 'multipart/form-data'
? ? }).then(res=>{
? ? ? ? res = res.data
? ? ? ? // 上傳成功后的處理
? ? ? ? if (res == true) {
? ? ? ? // 上傳成功
? ? ? ? }
? ? ? ? else {
? ? ? ? // 上傳失敗
? ? ? ? }
? ? })
}

通過以上的做法,就能夠在前后端分離架構(gòu)中實(shí)現(xiàn)文件上傳啦!文章來源地址http://www.zghlxwxcb.cn/news/detail-605778.html

到了這里,關(guān)于前后端分離架構(gòu)文件上傳與下載(含Vue?+?Spring完整代碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • SpringBoot+Vue實(shí)現(xiàn)校園二手系統(tǒng)。前后端分離技術(shù)【完整功能介紹+實(shí)現(xiàn)詳情+源碼】

    SpringBoot+Vue實(shí)現(xiàn)校園二手系統(tǒng)。前后端分離技術(shù)【完整功能介紹+實(shí)現(xiàn)詳情+源碼】

    全部源代碼地址 :傳送門 文章內(nèi)容有點(diǎn)長,建議打開右側(cè)目錄導(dǎo)航欄查看 。 ??????? 這個系統(tǒng)基本上可以改造為其它類似的系統(tǒng)。后臺管理基本上一致。前臺進(jìn)行一些頁面樣式的改造就可以變成一個新的系統(tǒng)。有時間,做幾個變體系統(tǒng)。 ???????閑的無聊,把大學(xué)時候

    2024年02月07日
    瀏覽(26)
  • ruoyi-vue前后端分離框架上傳圖片不顯示問題,nginx解決方案

    使用若依前后端分離框架,前端項(xiàng)目打包在Nginx,上傳圖片時,圖片上傳成功,但是在列表頁和添加/修改頁面沒有正常顯示。 插入成功后數(shù)據(jù)庫保存數(shù)據(jù)樣式: 回顯數(shù)據(jù)時樣式: 此時樣式是打不開的,無法找到路徑 解決辦法:nginx.conf在location中添加alias location /prod-api/profil

    2024年02月02日
    瀏覽(24)
  • Spring Cloud + Vue前后端分離-第12章 通用權(quán)限設(shè)計(jì)

    Spring Cloud + Vue前后端分離-第12章 通用權(quán)限設(shè)計(jì)

    ?源代碼在GitHub - 629y/course: Spring Cloud + Vue前后端分離-在線課程 這一章我們不依賴第三方框架,我會從權(quán)限相關(guān)表的設(shè)計(jì),到權(quán)限的配置,到權(quán)限的攔截,帶大家一步一步的做出一個通用的權(quán)限設(shè)計(jì)方案。 權(quán)限攔截的對象:用戶 權(quán)限攔截的點(diǎn):菜單、路由、接口、按鈕 控制

    2024年01月16日
    瀏覽(24)
  • 手把手教你搭建Spring Boot+Vue前后端分離

    手把手教你搭建Spring Boot+Vue前后端分離

    1 什么是前后端分離 前后端分離是目前互聯(lián)網(wǎng)開發(fā)中比較廣泛使用的開發(fā)模式,主要是將前端和后端的項(xiàng)目業(yè)務(wù)進(jìn)行分離,可以做到更好的解耦合,前后端之間的交互通過xml或json的方式,前端主要做用戶界面的渲染,后端主要負(fù)責(zé)業(yè)務(wù)邏輯和數(shù)據(jù)的處理。 2 Spring Boot后端搭建

    2023年04月08日
    瀏覽(100)
  • Spring Boot+Vue前后端分離項(xiàng)目如何部署到服務(wù)器

    Spring Boot+Vue前后端分離項(xiàng)目如何部署到服務(wù)器

    ?? 前言 歡迎來到我的技術(shù)小宇宙!?? 這里不僅是我記錄技術(shù)點(diǎn)滴的后花園,也是我分享學(xué)習(xí)心得和項(xiàng)目經(jīng)驗(yàn)的樂園。?? 無論你是技術(shù)小白還是資深大牛,這里總有一些內(nèi)容能觸動你的好奇心。?? ?? 洛可可白 :個人主頁 ?? 個人專欄 :?前端技術(shù) ?后端技術(shù) ?? 個人

    2024年04月11日
    瀏覽(108)
  • SpringBoot + Vue前后端分離項(xiàng)目實(shí)戰(zhàn) || 三:Spring Boot后端與Vue前端連接

    SpringBoot + Vue前后端分離項(xiàng)目實(shí)戰(zhàn) || 三:Spring Boot后端與Vue前端連接

    系列文章: SpringBoot + Vue前后端分離項(xiàng)目實(shí)戰(zhàn) || 一:Vue前端設(shè)計(jì) SpringBoot + Vue前后端分離項(xiàng)目實(shí)戰(zhàn) || 二:Spring Boot后端與數(shù)據(jù)庫連接 SpringBoot + Vue前后端分離項(xiàng)目實(shí)戰(zhàn) || 三:Spring Boot后端與Vue前端連接 SpringBoot + Vue前后端分離項(xiàng)目實(shí)戰(zhàn) || 四:用戶管理功能實(shí)現(xiàn) SpringBoot + Vue前后

    2024年02月12日
    瀏覽(47)
  • Java之Spring Boot+Vue+Element UI前后端分離項(xiàng)目

    Java之Spring Boot+Vue+Element UI前后端分離項(xiàng)目

    typeId : this.typeId, }).then((res) = { this.$router.push(“/”); this.$message.success(“文章發(fā)布成功!”); }).catch(() = { this.$message.error(“文章發(fā)布失敗!”); }); }, handleAvatarSuccess(res, file) { this.imageUrl = URL.createObjectURL(file.raw); this.thumbnail = “http://localhost:9090/img/” + res; }, selectType(typename,id) { t

    2024年04月27日
    瀏覽(43)
  • [每周一更]-(第57期):用Docker、Docker-compose部署一個完整的前后端go+vue分離項(xiàng)目

    [每周一更]-(第57期):用Docker、Docker-compose部署一個完整的前后端go+vue分離項(xiàng)目

    將公司物理機(jī)項(xiàng)目改為容器化部署,最終方案是通過容器docker-compose部署使項(xiàng)目可以ip+端口訪問,再通過物理機(jī)nginx代理進(jìn)行https域名訪問。 可能還有更好的方式,開一個nginx的容器,進(jìn)行代理,但由于跟物理機(jī)80,443端口沖突,暫時沒有采用。 可能目前處理不是最好的方式,不

    2024年02月14日
    瀏覽(31)
  • Spring Boot(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot 前后端分離)【一】

    Spring Boot(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot 前后端分離)【一】

    ??前言 本篇博文是關(guān)于Spring Boot(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot 前后端分離)【一】,希望你能夠喜歡 ??個人主頁:晨犀主頁 ??個人簡介:大家好,我是晨犀,希望我的文章可以幫助到大家,您的滿意是我的動力???? ??歡迎大家:這里是CSDN,我總結(jié)知識的地方,歡

    2024年02月11日
    瀏覽(97)
  • Spring Boot(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot 前后端分離)【六】

    Spring Boot(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot 前后端分離)【六】

    ??前言 本篇博文是關(guān)于Spring Boot(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot 前后端分離)【六】,希望你能夠喜歡 ??個人主頁:晨犀主頁 ??個人簡介:大家好,我是晨犀,希望我的文章可以幫助到大家,您的滿意是我的動力???? ??歡迎大家:這里是CSDN,我總結(jié)知識的地方,歡

    2024年02月11日
    瀏覽(103)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包