日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

axios nodejs 上传图片_Vue Axios跨域、文件上传

發布時間:2025/3/21 vue 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 axios nodejs 上传图片_Vue Axios跨域、文件上传 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文以vue-cli中使用axios為例

安裝

npm install --save axios

引用(注冊到VUE實例中)

import Vue from 'vue'

import Axios from 'axios'

//querystring 為nodejs 內置模塊 在post 請求中使用到 寫在這里是防止不小心將import 語句寫在代碼區塊內的伙伴

//作用 將 類似 {a:'aa',b:'bb'} 與 a=aa&b=bb 類型的互相轉換編碼

import querystring from 'querystring' // 或者 import qs from 'qs'

Vue.prototype.$querystring=qs

//create([options]) 方法允許設置一些默認的配置 (可選) 如下:

const axios=Axios.create({

baseURL:'http://127.0.0.1/', // 通常配置基礎的接口入口地址

timeout:5000, // 請求超時時間

headers:{// 這里可設置所有的請求頭

'Content-Type':'application/x-www-form-urlencoded', //該項建議設置 如果未 POST請求時 數據未做處理時會出現錯誤,最理想的解決方法就是 直接設置該項

},

withCredentials:true,//是否允許發送Cookie 如果為true 則服務器的 Access-control-Allow-Credentials 必須為 true 來源為 XMLHttpRequest的withCredentials配置項

// 以下兩項為攔截器配置 可最后再看

transformRequest: [function (data) {//準備發送請求觸發的事件 類型:Array || Function 可以是一個函數或數組 data 為發送的數據 get 為undefined

console.log('準備發送請求:',data)

// 此處可對發送的數據進行處理

return data; //最終數據

}],

transformResponse: [function (data) {//接收到數據首先處理的函數 ,data 為服務器返回的數據(// 1.響應結構 里的 rs.data)

console.log('接收到數據:',data)

return data;//最終數據

},function (data) {//當為數組時 竄行操作 data 為上一步中的最終數據

console.log('before',data)

return data;

}],

})

axios.all=Axios.all; // 由于使用create方法返回的 實例缺少了 all 方法 在這里 加進去 all() 方法主要用于并發請求 , 在文章末尾講解

Vue.prototype.$http=axios; // 綁定到 Vue 實例中 如果不進行create()配置可直接:Vue.prototype.$http=Axios;

// 注:后續使用 只需 const axios=this.$http; 即可.

注:withCredentials:true 項開啟可實現服務器與前端互通cookie、session

跨域請求服務器配置(此處以php為例 ,簡單說就是設置服務器 headers)

header('Access-Control-Allow-Origin:*'); // 遠程訪問權限允許所有(該項必須設置)

//注:如果 Access-control-Allow-Credentials 為 true 則 Access-Control-Allow-Origin 必須 設置確定的域名 不能使用通配符。如下:

header('Access-Control-Allow-Origin:http://127.0.0.1:8080');

header('Access-control-Allow-Credentials:true');//默認 false 是否同意發送Cookie 如果前端請求 withCredentials:true 則該項須設置為true

header('Access-control-Allow-Methods:GET,POST');//可選 遠程請求方法控制 (get post put delete ......)

注:Access-control-Allow-Credentials:true 項開啟可實現服務器與前端互通cookie、session

GET 請求

axios.get(url,[configs])

url:請求的接口地址 如果為相對路徑則 會在 url 前加上 配置項中的 baseURL 型如:baseURL+url

configs 臨時的配置項 僅對當次請求有效 (可選)

// 如下 可針對不同的請求進行特例配置設置

this.$http.get('/api.php',{

//baseURL:'http://127.0.0.1/axios/',

//timeout:10000,

})

.then(rs=>{// axios 實現了 Promise 接口 then 方法即是我們的請求成功回調 傳入的參數 rs 為返回數據 (1.響應結構)

console.log(rs)

})

.catch(err=>{// Promise 接口 catch 方法 為錯誤處理回調 err 為錯誤信息

console.log(err)

})

// 1.響應結構:

{

data:Array, //我們從返回的數據

status:200, //服務器狀態碼

statusText:'ok', //服務器相應碼信息

config:Object, //當次請求的axios配置信息

headers:Object, //服務響應頭

request:XMLHttpRequest // xhr 對象

}

POST 請求

axios.post(url,data,[configs])

url:請求的接口地址 如果為相對路徑則 會在 url 前加上 配置項中的 baseURL 型如:baseURL+url

data POST數據 (Object、String、FormData、URLSearchParams 、ArrayBuffer ......)

configs 臨時的配置項 僅對當次請求有效 (可選)

let data={

title:'POST傳輸',

content:'通常以一個對象直接發送,服務器所收到的數據并不是期望的那樣!',

}

// post 請求如果data 為空請傳 {} 省略將出現錯誤警告

// 我們在開頭說到 querystring 模塊在此處使用的問題 。以下`#`號內的代碼如果不寫 那么服務器接收到的數據是會有很大差別的。 可先自行試驗。

// 當然大部分人都說使用 URLSearchParams 或者 FormData進行處理,但我覺得有點啰嗦。

// ###################這是井號#####################

data=this.$querystring.stringify(data)

// ###################這是井號#####################

this.$http.post('/api.php',data)

.then(rs=>{

console.log(rs)

})

POST+FormData 實現跨域異步上傳

FormData是什么?請點擊 FormData對象參考

單文件上傳 例:

export default {

data(){

return {

imgUrl:'',

}

},

methods:{

uploads(e){

const file=e.target.files[0];//獲取到當前文件對象

let URL=window.URL||window.webkitURL; // 與上傳沒有關系(可選)

this.imgUrl=URL.createObjectURL(file); // 這是為了顯示圖片而已, 與上傳沒有關系(可選)

// 傳遞一個 FormData 對象 即可

let formData=new FormData();

formData.append('file',file); // 'file' 可變 相當于 input 表單的name 屬性

// 服務器只需按照正常的上傳程序代碼即可

this.$http.post('/upload.php',formData).then(rs=>{

console.log(rs.data)

}).catch(err=>{

console.log(err)

})

},

}

}

多文件上傳 例:

uploadAll

export default {

data(){

return {

images:[],//顯示圖片所用 與上傳沒有關系(可選)

formData:new FormData(),//在此處初始化時,即實例化 FormData

}

},

methods:{

uploads(e){

const file=e.target.files[0];

let URL=window.URL||window.webkitURL;// 與上傳沒有關系(可選)

this.images.push(URL.createObjectURL(file)) // 這是為了顯示圖片而已, 與上傳沒有關系(可選)

this.formData.append('file[]',file); // 'file[]' 代表數組 其中`file`是可變的

},

uploadAll(){

//當點擊上傳時直接上傳 服務器按照正常的多文件上傳操作即可

this.$http.post('/a.php',this.formData).then(rs=>{

console.log(rs.data)

}).catch(err=>{

console.log(err)

})

}

}

}

并發請求

// 首先需要并發的聲明操作方法a()、b()如下

function a() {

return this.$http.get('/a.php');

}

function b() {

let data={

val:"來自http://127.1.0.1:8080的POST請求",

}

return this.$http.post('/b.php',this.$querystring.stringify(data));

}

// all()方法接收一個數組 數組的項目 即為 并發方法

this.$http.all([a(),b()])

.then(rs=>{

// rs 為一個數組 每一項對應 all 方法中 對應的并發方法 的返回值

console.log(rs)

})

總結

以上是生活随笔為你收集整理的axios nodejs 上传图片_Vue Axios跨域、文件上传的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。