最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3快速實現(xiàn)文件上傳OSS的方法詳解

 更新時間:2024年01月28日 10:02:58   作者:吃她喵的花椒  
這篇文章給大家介紹了Vue3快速實現(xiàn)文件上傳OSS的方法,上傳文件可以說是經(jīng)典的需求了,在后臺管理項目中隨處可見,一般是由前端進行文件上傳,然后再由后端去處理,本文旨在實現(xiàn)上傳功能,不考慮額外的功能(如文件尺寸限制),感興趣的朋友可以參考下

前言

上傳文件可以說是經(jīng)典的需求了,在后臺管理項目中隨處可見。一般是由前端進行文件上傳,然后再由后端去處理。可以選擇把文件放到服務(wù)器上,但是隨著后續(xù)文件增多,可能會對服務(wù)器的開銷比較大,所以一般都采用OSS(Object Storage Service)對象存儲服務(wù),將我們的文件上傳到第三方服務(wù)上,而我們只需要通過url去訪問文件就可以了。那么今天就讓我們來簡單實現(xiàn)一下文件上傳的功能吧。

前端采用的是Element plus的upload組件,后端是NodeJS,采用阿里云的OSS服務(wù)進行存儲。

本文旨在實現(xiàn)上傳功能,不考慮額外的功能(如文件尺寸限制)。

前端

前端引用一下組件,需要注意的是Element plus的upload組件提供了action配置項,填寫請求URL就可以上傳文件。

但為了后期維護,我們一般都不采用action配置項,而是將其賦值為#,通過http-request封裝我們自己的請求方法。

通過組件庫文檔可知,我們的doUpload方法會獲得一個options參數(shù),我們來看看這個參數(shù)里有什么。

可以看到通過options可以獲取到組件的一些屬性和方法,其中的file就是我們所需要上傳的文件對象。將其解構(gòu)出來通過FormData創(chuàng)建表單對象將文件通過我們封裝的upload方法傳輸?shù)胶蠖恕?/p>

const doUpload = async (options: any) => {
  const { file } = options;
  const formData = new FormData();
  formData.append('file', file);
  await upload(fileData);
}

這里有個要點,因為是FormData表單對象,所以我們需要在請求頭中設(shè)置Content-Typeapplication/form-data,這樣后端才可以識別我們上傳的文件,upload方法如下。

const headers = {
  'Content-type': 'application/form-data'
};
export function upload(params: any) {
  return instance.post('/uploadImg', params, { headers });
}

后端

后端我們采用express進行編寫。

首先簡單實現(xiàn)以下接口(注:由于我采用的是TypeScript,所以可以使用ESModule即import和export進行模塊引入導出)。

import express from 'express';
const app = express();

app.post('/uploadImg',(req, res) => {});

app.listen(1300, () => {})

由于我們使用post請求,所以需要通過body-parser中間件對請求體的數(shù)據(jù)進行解析,使解析后的數(shù)據(jù)可用于后續(xù)的請求處理。

通過pnpm add body-parser 進行安裝。

import bodyParser from 'body-parser';
app.use(bodyParser.json({ limit: '10mb' }));
app.use(bodyParser.urlencoded({ limit: '10mb', extended: true }));

以及還需要cors中間件解決跨域問題。

pnpm add cors。

import cors from 'cors';
app.use(cors());

最后,我們還需要multer中間件處理我們上傳的文件,具體使用如下。

pnpm add multer

import multer from 'multer';
const upload = multer({ dest: 'uploads/' }); // 指明文件的地址,即我們后端服務(wù)的uploads文件夾下,如果沒有會創(chuàng)建。

// 接口中進行文件解析
app.post('/uploadImg', upload.single('file'), async (req: any, res: Response) => {})

這里的upload.single表明只處理上傳數(shù)據(jù)中的file字段對應的數(shù)據(jù),也就是我們之前formData.append('file',file)里的file文件,如果你設(shè)置的是其他字段如fileData,那么中間件就要寫為upload.single('fileData')。

我們可以通過req.file來獲取處理好的文件,那么我們來看看打印一下這個req.file里有什么吧。

可以看到里面包含了關(guān)于文件的一些信息,比如名稱、類型、地址等,其中名稱和地址會是我們所需要的參數(shù)。

OSS服務(wù)

在阿里云的OSS文檔里有提供文件上傳的示例代碼。

進入后我們選擇NodeJS的SDK參考,通過下圖路徑可以看到本文所需的示例代碼。

可以看到要使用OSS服務(wù)需要下載ali-oss第三方庫。

pnpm add ali-oss

import * as OSS from 'ali-oss';

const client = new OSS.default({
  // yourRegion填寫B(tài)ucket所在地域。以華東1(杭州)為例,Regin填寫為oss-cn-hangzhou。
  region: 'oss-cn-hangzhou',
  accessKeyId: '你的阿里云key',
  accessKeySecret: '你的阿里云keyScerect',
  // 填寫B(tài)ucket名稱,例如examplebucket。
  bucket: '你阿里云OSS的桶名'
});

export async function put(filename: string, fileData: File) {
  try {
    // 填寫OSS文件完整路徑和本地文件的完整路徑。OSS文件完整路徑中不能包含Bucket名稱。
    // 如果本地文件的完整路徑中未指定本地路徑,則默認從示例程序所屬項目對應本地路徑中上傳文件。
    const result = await client.put(filename, fileData);
    return result;
  } catch (e) {
    console.log(e);
  }
}

以上就是完整的上傳方法,只需要填寫配置就行,其中accessKeyIdaccessKeySecret可以通過個人面板的AccessKey管理創(chuàng)建獲取。

隨后我們就可以在接口中進行調(diào)用,傳入所需的filenamefileData。

router.post('/uploadImg', upload.single('file'), async (req: any, res: Response) => {
  const file = req.file;
  const result = await put(file.originalname, file.path);
  res.send({ code: 200, data: { fileName: result?.name, url: result?.url } });
});

到現(xiàn)在為止,我們代碼基本實現(xiàn)了,接下來看看成果吧。

可以在阿里云的OSS中看到我們上傳的文件。

而在后端也可獲取到接口返回的文件名和外鏈地址。

總結(jié)

以上就是通過Element Plus的Upload組件、NodeJS和阿里OSS服務(wù)實現(xiàn)的文件上傳簡單實現(xiàn)啦。我是花椒,如果你覺得我的文章還不錯就給我點個贊吧~ 如果有什么錯誤也歡迎評論指正哦~

到此這篇關(guān)于Vue3快速實現(xiàn)文件上傳OSS的方法詳解的文章就介紹到這了,更多相關(guān)Vue3實現(xiàn)文件上傳OSS內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue+Vux實現(xiàn)登錄功能

    Vue+Vux實現(xiàn)登錄功能

    這篇文章主要介紹了Vue+Vux實現(xiàn)登錄功能,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • vue中過濾器的用法

    vue中過濾器的用法

    這篇文章介紹了vue中過濾器的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 代號為Naruto的Vue?2.7正式發(fā)布功能詳解

    代號為Naruto的Vue?2.7正式發(fā)布功能詳解

    這篇文章主要為大家介紹了代號為Naruto的Vue?2.7正式發(fā)布功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • vue實現(xiàn)短信驗證碼登錄功能(流程詳解)

    vue實現(xiàn)短信驗證碼登錄功能(流程詳解)

    無論是移動端還是pc端登錄或者注冊界面都會見到手機驗證碼登錄這個功能,輸入手機號,得到驗證碼,這篇文章主要介紹了基于vue實現(xiàn)短信驗證碼登錄功能,需要的朋友可以參考下
    2019-12-12
  • Vue3中的Fragment使用方法詳解

    Vue3中的Fragment使用方法詳解

    Fragment 是 Vue 3 中的新特性,允許一個組件模板返回多個根節(jié)點,與傳統(tǒng)方式不同,不再需要一個額外的 DOM 元素來包裹所有內(nèi)容,本文將詳細介紹 Fragment 的概念、使用場景、優(yōu)點以及可能遇到的問題,需要的朋友可以參考下
    2024-08-08
  • Vue3動態(tài)使用KeepAlive組件的實現(xiàn)步驟

    Vue3動態(tài)使用KeepAlive組件的實現(xiàn)步驟

    在 Vue 3 項目中,我們有時需要根據(jù)路由的 meta 信息來動態(tài)決定是否使用 KeepAlive 組件,以控制組件的緩存行為,所以本文給大家介紹了Vue3動態(tài)使用KeepAlive組件的實現(xiàn)步驟,通過代碼示例講解的非常詳細,需要的朋友可以參考下
    2024-11-11
  • Vue3?路由頁面切換動畫?animate.css效果

    Vue3?路由頁面切換動畫?animate.css效果

    這篇文章主要介紹了Vue3路由頁面切換動畫animate.css效果,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • vue實現(xiàn)拖拽效果

    vue實現(xiàn)拖拽效果

    這篇文章主要為大家詳細介紹了vue實現(xiàn)拖拽效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • Vue實現(xiàn)自動檢測以及版本的更新

    Vue實現(xiàn)自動檢測以及版本的更新

    當用戶在當前站點停留時間比較長,中途站點進行升級更新之后,用戶如果不刷新頁面就任然停留在舊的頁面里,如何讓用戶收到一個提示,引導用戶進行更新操作呢?下面給大家介紹如何站點更新如何在生產(chǎn)環(huán)境提示用戶更新,進行頁面刷新操作,核心原理其實很簡單
    2023-03-03
  • Vue3文件下載方法實現(xiàn)的簡單代碼

    Vue3文件下載方法實現(xiàn)的簡單代碼

    在Web開發(fā)中,文件下載可通過多種方式實現(xiàn),下面這篇文章主要介紹了Vue3文件下載方法實現(xiàn)的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-10-10

最新評論

延津县| 株洲市| 乌什县| 泸溪县| 成都市| 常宁市| 西畴县| 临澧县| 新余市| 界首市| 东明县| 丰县| 盐山县| 宜丰县| 昌乐县| 平陆县| 大连市| 佛山市| 漳浦县| 太保市| 靖宇县| 镇远县| 华安县| 博白县| 华蓥市| 衡水市| 广丰县| 武汉市| 通城县| 浪卡子县| 女性| 新民市| 苍南县| 定襄县| 慈溪市| 太康县| 平度市| 兴国县| 重庆市| 陆丰市| 商河县|