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

springboot + vue + elementui — upload解決跨域、實現(xiàn)圖片上傳

這篇具有很好參考價值的文章主要介紹了springboot + vue + elementui — upload解決跨域、實現(xiàn)圖片上傳。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

今日記錄通過elementui上傳時得到的問題。

我們在本地部署的服務(wù),前端服務(wù)請求后端接口,存在跨域問題,

至于為什么會有跨域這個問題?

跨域問題確實是由Web瀏覽器的同源策略引起的。同源策略是瀏覽器的一項安全機(jī)制,它限制了從一個源加載的文檔或腳本如何與來自其他源的資源進(jìn)行交互。

同源策略要求在以下三個方面完全匹配時才被認(rèn)為是同源

  1. 協(xié)議(Protocol):兩個頁面的協(xié)議必須相同(如都是http或https)。
  2. 域名(Domain):兩個頁面的域名必須相同,包括子域名(如example.com和www.example.com被視為不同的域名)。
  3. 端口號(Port):兩個頁面的端口號必須相同(如果指定了端口號)。

為什么后端服務(wù)跟后端服務(wù)的交互,沒有跨域;而瀏覽器和服務(wù)器的交互有?

因為,后端服務(wù)之間不存在同源策略的限制。

另外,我們通常前端向后端的通信請求,一般依賴的是瀏覽器的通信API來完成的,當(dāng)我們請求時,瀏覽器會檢測我們請求的url是否與當(dāng)前存在跨域問題。

解決跨域:

1.可以利用springboot解決跨域問題,這里不列舉

2.利用vue配置進(jìn)行反向代理。

vue解決跨域

在vue.config.js文件中配置

module.exports = {
    devServer: {
        proxy: {
            '/api': { // 請求的代稱,寫在Axios里的BaseUrl
                target: 'http://localhost:8088', // 真實請求URl
                ws: true,
                changeOrigin: true, // 允許跨域
                pathRewrite: { //替換,通配/api的替換成對應(yīng)字符
                //     /* 重寫路徑,當(dāng)我們在瀏覽器中看到請求的地址為:http://localhost:8080/api/core/getData/userInfo 時
                //       實際上訪問的地址是:http://localhost:8088/core/getData/userInfo,因為重寫了 /api
                //      */
                    '^/api': '' //當(dāng)你的接口中沒有/api字眼時,采用這種,直接替換成空即可
                //     '^/api': '/api'   //當(dāng)你的接口中剛好有/api 時,采用這種方式
                }
            }
        }
    }
}

換句話說,在本地創(chuàng)建了一個代理服務(wù)器,我們的請求全發(fā)到代理服務(wù)器上了?,由代理服務(wù)器替我們發(fā)請求到后端服務(wù)器,拿到響應(yīng)數(shù)據(jù)接著響應(yīng)給我。

圖片上傳

java代碼如下:

@RestController
@RequestMapping("/common")
@Api(tags = "文件controller")
public class CommonController {

    @Value("${reggie.path}")
    private String basePath;

    @ApiOperation("文件上傳")
    @PostMapping("/upload")
    public Result upLoad(@RequestParam("file") MultipartFile file) {

        // 原始文件名   abc.jpc
        String originalFilename = file.getOriginalFilename();
        // 獲取文件類型(jpg、png)  .jpc
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));

        // 使用UUID重新生成文件名,防止文件名重復(fù)
        String fileName = UUID.randomUUID() + suffix;

        // 創(chuàng)建目錄
        File dir = new File(basePath);
        if(!dir.exists()) {
            dir.mkdirs();
        }

        try {

            file.transferTo(new File(basePath + fileName)); // 當(dāng)前目錄下,生成圖片,我們將這個路徑返回
        } catch (IOException e) {
            e.printStackTrace();
        }
        return Result.success("文件上傳成功", fileName);
    }

    @ApiOperation("文件下載")
    @GetMapping("/download")
    public void downLoad(String name, HttpServletResponse response) {
        try {
            // 輸入流,通過輸入流讀取文件內(nèi)容
            FileInputStream fileInputStream = new FileInputStream(new File(basePath + name));

            // 輸出流,通過輸出流將文件寫回瀏覽器
            ServletOutputStream outputStream = response.getOutputStream();

            response.setContentType("image/jpeg");

            int len = 0;
            byte[] bytes = new byte[1024]; // 緩存
            while ((len = fileInputStream.read(bytes)) != -1) {
                outputStream.write(bytes, 0, len);
                outputStream.flush();
            }

            //關(guān)閉資源
            outputStream.close();
            fileInputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


}

?springboot + vue + elementui — upload解決跨域、實現(xiàn)圖片上傳,Vue,vue.js,elementui,前端

vue代碼如下:

 <el-upload action="/api/common/upload" //后端請求上傳圖片接口
     list-type="picture-card" 
     :show-file-list="false" // 開啟上傳圖片列表
     :on-success="handleAvatarSuccess" // 成功響應(yīng)后調(diào)用api,主要是這個
    :before-upload="beforeAvatarUpload" //上傳之前調(diào)用api
  >
 <i class="el-icon-plus"></i>
</el-upload>
  <img :src="infoForm.avatar" alt="編輯頭像" class="update-img">

我們后端指定上傳圖片路徑如上,當(dāng)我們點擊上傳圖片時,請求后端接口,圖片會緩存到上述位置 ,并且會被如下函數(shù)接收到。


        // 獲得上傳圖片的url
        handleAvatarSuccess(res, file) {
            console.log(file, res);
            this.infoForm.avatar = 'images/' + res.data

            // 拿到二進(jìn)制數(shù)據(jù),是blob類型,存儲到瀏覽器內(nèi)存中,一刷新數(shù)據(jù)會消失
            // console.log("imgUrl:", URL.createObjectURL(file.raw));
        },

具體接受結(jié)果。?

springboot + vue + elementui — upload解決跨域、實現(xiàn)圖片上傳,Vue,vue.js,elementui,前端

以上,我們可以2種方式,拿到圖片url:

  1. ?獲取blob,url,但是一刷新圖片會消失,因為blob url表示的圖片是在瀏覽器內(nèi)存中,而不是存儲在硬盤上。
  2. ?利用images/?+ 圖片名字.jpg

springboot + vue + elementui — upload解決跨域、實現(xiàn)圖片上傳,Vue,vue.js,elementui,前端

具體就是: 我們后端緩存路徑就是,vue項目中的public/images文件夾。

為什么這樣使用呢?

淺談一下:

1.經(jīng)過webpack打包的vue項目結(jié)構(gòu)會發(fā)生改變,我們原有的圖片路徑會失效。

2.public文件下,相當(dāng)于是靜態(tài)資源,不會經(jīng)過webpack打包。

3.vue對于靜態(tài)路徑和動態(tài)路徑(變量)的解析不一樣。

具體看如下:

vue圖片路徑問題_本郡主是喵的博客-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-693817.html

到了這里,關(guān)于springboot + vue + elementui — upload解決跨域、實現(xiàn)圖片上傳的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • antd+Vue 3實現(xiàn)table行內(nèi)upload文件圖片上傳【超詳細(xì)圖解】

    antd+Vue 3實現(xiàn)table行內(nèi)upload文件圖片上傳【超詳細(xì)圖解】

    目錄 一、背景 二、效果圖 三、代碼 一名被組長逼著干前端的苦逼后端,在一個晴天霹靂的日子,被要求前端訂單產(chǎn)品實現(xiàn)上傳產(chǎn)品圖片并立刻回顯圖片。

    2024年04月11日
    瀏覽(27)
  • vue+ElementUI實現(xiàn)點擊圖片預(yù)覽大圖和預(yù)覽視頻

    vue+ElementUI實現(xiàn)點擊圖片預(yù)覽大圖和預(yù)覽視頻

    最近遇到一個需求: 在表格中實現(xiàn)預(yù)覽圖片和查看視頻 預(yù)覽圖片功能: 如下,是材料一欄的代碼 在 data 中定義: methods 中: style 中: 預(yù)覽圖片的功能就完成了. 接下來是查看視頻: 安裝 vue-video-player 在 main.js 中: 在寫的vue頁面中引入: 當(dāng)時在 main.js 中引入后,發(fā)現(xiàn)這個插件沒效果,然后

    2023年04月08日
    瀏覽(22)
  • vue項目跨域問題(圖片跨域)devServer.proxy代理失效時,nginx反向代理解決跨域問題

    vue項目跨域問題(圖片跨域)devServer.proxy代理失效時,nginx反向代理解決跨域問題

    ? 本篇文章主要記錄個人在公司項目開發(fā)中所遇問題,主要內(nèi)容:在vue項目的開發(fā)中圖片所存的服務(wù)器/端口號和項目所在的服務(wù)器/端口號不同,出現(xiàn)了跨域問題的保錯。 ? 如果文章有歧義,請各位大佬指出,避免誤導(dǎo)更多的人??! Bug起因 ? 在vue項目的開發(fā)中圖片所存的

    2024年02月15日
    瀏覽(26)
  • Vue+element Upload利用http-request實現(xiàn)第三方地址圖片上傳

    Vue+element Upload利用http-request實現(xiàn)第三方地址圖片上傳

    Vue + element (el-upload)中的 :http-request 圖片上傳 java后端上傳接口,利用 OSS 存儲圖片 postman測試 圖片上傳功能及方法 對比: 服務(wù)端簽名后直傳 使用element UI 的el-upload實現(xiàn)第三方地址圖片上傳,替換原來的action方法 直接上傳方法如下:上傳圖片根據(jù)action地址請求后獲取到圖片u

    2023年04月26日
    瀏覽(18)
  • 解決SpringBoot和前端Vue的跨域問題

    解決SpringBoot和前端Vue的跨域問題

    一、為什么會出現(xiàn)跨域問題?? ????????出于瀏覽器的同源策略限制。同源策略(Sameoriginpolicy)是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽器的正常功能可能都會受到影響。可以說Web是構(gòu)建在同源策略基礎(chǔ)之上的,瀏覽器只是針對同

    2024年02月04日
    瀏覽(17)
  • Vue+elementUI中的el-upload實現(xiàn)上傳文件給后端,限制上傳文件的格式、文件的大小、文件的數(shù)量,將表單和Excel文件一起提交給后端

    Vue+elementUI中的el-upload實現(xiàn)上傳文件給后端,限制上傳文件的格式、文件的大小、文件的數(shù)量,將表單和Excel文件一起提交給后端

    需求:1.表單輸入信息 2.上傳Excel附件 3.下載附件模板 4.限制上傳文件的格式、文件的大小、文件的數(shù)量 5.將表單和Excel文件一起提交給后端 效果圖: 樣式部分 data部分代碼 method中的代碼

    2024年02月12日
    瀏覽(31)
  • uniApp 封裝Upload組件實現(xiàn)圖片和視頻上傳,解決官方api單一上傳問題

    uniApp 封裝Upload組件實現(xiàn)圖片和視頻上傳,解決官方api單一上傳問題

    ?uniapp 官方api沒有同時上傳圖片和視頻的組件,所以就只能自己做了,在此記錄下! 這里之所以循環(huán)一個一個上傳是因為,我是用于小程序端的,目前uniapp不支持微信小程序以文件列表形式上傳, filePath: item, //改為files可實現(xiàn)一次上傳多個文件,僅App、H5( 2.6.15+)支持 具體

    2024年02月14日
    瀏覽(30)
  • 基于Java+SpringBoot+vue+elementui圖書商城系統(tǒng)設(shè)計實現(xiàn)

    基于Java+SpringBoot+vue+elementui圖書商城系統(tǒng)設(shè)計實現(xiàn)

    博主介紹 : ? 全網(wǎng)粉絲20W+,csdn特邀作者、博客專家、CSDN新星計劃導(dǎo)師、java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和畢業(yè)項目實戰(zhàn) ? ?? 文末獲取聯(lián)系 ?? 精彩專欄 推薦訂閱 ???????????????? ?java項目精品實戰(zhàn)案例

    2024年01月21日
    瀏覽(25)
  • Springboot + Vue ElementUI 實現(xiàn)MySQL&&Postgresql可視化

    Springboot + Vue ElementUI 實現(xiàn)MySQL&&Postgresql可視化

    PostgreSQL教程--實現(xiàn)類似于MySQL的show create table功能實現(xiàn)見末尾 效果如圖: DB連接配置維護(hù): Schema功能:集成Screw生成文檔,導(dǎo)出庫的表結(jié)構(gòu),導(dǎo)出表結(jié)構(gòu)和數(shù)據(jù) ?表對象操作:翻頁查詢,查看創(chuàng)建SQL,生成代碼 可以單個代碼文件下載,也可以全部下載(打成zip包下載返回)

    2024年02月12日
    瀏覽(22)
  • vue實戰(zhàn)--vue+elementUI實現(xiàn)多文件上傳+預(yù)覽(word/PDF/圖片/docx/doc/xlxs/txt)

    vue實戰(zhàn)--vue+elementUI實現(xiàn)多文件上傳+預(yù)覽(word/PDF/圖片/docx/doc/xlxs/txt)

    ????最近在做vue2.0+element UI的項目中遇到了一個需求:需求是多個文件上傳的同時實現(xiàn)文件的在線預(yù)覽功能。需求圖如下: ????看到這個需求的時候,小栗腦袋一炸。并不知道該如何下手,之前的實踐項目中也并沒有遇到相似的功能。因此也廢了一番功夫想要實現(xiàn)這樣一個

    2024年01月23日
    瀏覽(34)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包