摘要:項(xiàng)目結(jié)構(gòu)為前后端分離,中間布了一層。文件上傳要求將文件信息等發(fā)送到后臺(tái)。上傳文件時(shí),使用表單上傳的,則需要設(shè)置表單的等于,因?yàn)樵撝的J(rèn)值為使用庫(kù)上傳,需設(shè)置為。使用上傳,無(wú)需設(shè)置。
項(xiàng)目結(jié)構(gòu)為前后端分離,中間布了一層node。
文件上傳要求:將文件信息等發(fā)送到后臺(tái)。
html代碼客戶端上傳文件時(shí)的信息處理
可以使用FormData來(lái)異步上傳一個(gè)二進(jìn)制文件。上傳文件時(shí),
使用form表單上傳的,則需要設(shè)置表單的 enctype 等于 multipart/form-data,因?yàn)樵撝的J(rèn)值為application/x-www-form-urlencoded.
使用axios庫(kù)上傳,需設(shè)置Content-Type為multipart/form-data。
使用fetch上傳,無(wú)需設(shè)置Content-Type。
const file = document.querySelector("[type=file]"); const formData = new FormData(); formData.append("file", file.files[0]); formData.append("userName", "admin"); axios .post("/api/list/upload", formData, { headers: { "Content-Type": "multipart/form-data" } }) .then(() => { console.log("上傳成功"); });
成功發(fā)送數(shù)據(jù)的樣子
FormData若需傳輸數(shù)組之類的,根據(jù)后臺(tái)所使用的語(yǔ)言和框架選擇,例如后臺(tái)用的是PHP,可以這樣寫:
fileList.forEach((file) => { formData.append("files[]", file); });文件下載 html代碼
模板下載node端處理
因?yàn)轫?xiàng)目中使用了express,所以可以直接通過(guò)res.download方法來(lái)下載文件。
在server.js文件里面添加
//下載文件 const path = require("path"); app.use("/download/", function(req, res) { const filepath = path.join(__dirname, req.url + ".xlsx"); // 文件存儲(chǔ)的路徑 res.download(filepath); });
文件結(jié)構(gòu)為
問(wèn)題因?yàn)槭鞘褂胏reate-react-app搭建的,在本地開(kāi)發(fā)環(huán)境測(cè)試下載文件的情況時(shí),總是無(wú)法找到正確路徑進(jìn)行下載。后來(lái)在create-react-app說(shuō)明頁(yè)面的Proxying API Requests in Development模塊找到這樣一段話。
This way, when you fetch("/api/todos") in development, the development server will recognize that it’s not a static asset, and will proxy your request to http://localhost:4000/api/todos as a fallback. The development server will only attempt to send requests without text/html in its Accept header to the proxy.
大概意思就是,在開(kāi)發(fā)時(shí)請(qǐng)求fetch("/api/todos"),開(kāi)發(fā)服務(wù)器意識(shí)到它不是靜態(tài)資產(chǎn),所以會(huì)將請(qǐng)求進(jìn)行代理。開(kāi)發(fā)服務(wù)器只會(huì)將Accept頭中沒(méi)有text / html的請(qǐng)求進(jìn)行代理。
所以在本地開(kāi)發(fā)環(huán)境下測(cè)試下載文件時(shí),總是不能找到文件的正確路徑進(jìn)行下載。
解決 方法一開(kāi)發(fā)測(cè)試時(shí)直接將href寫成完整的請(qǐng)求路徑。當(dāng)然,測(cè)試完成后,還是要將“http://20.26.150.69:3001”給刪掉的。
模板下載方法二
根據(jù)create-react-app說(shuō)明頁(yè)面的Configuring the Proxy Manually
All requests matching this path will be proxies, no exceptions. This includes requests for text/html, which the standard proxy option does not proxy.
意思是匹配此路徑的所有請(qǐng)求都將是代理,包括對(duì)text / html的請(qǐng)求。
所以,可以將package.json里面的
改成類似這種形式,將Accept頭中有text / html的請(qǐng)求也納入代理范圍內(nèi)。
參考自:
FormData.append()
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/52873.html
摘要:項(xiàng)目結(jié)構(gòu)為前后端分離,中間布了一層。文件上傳要求將文件信息等發(fā)送到后臺(tái)。上傳文件時(shí),使用表單上傳的,則需要設(shè)置表單的等于,因?yàn)樵撝的J(rèn)值為使用庫(kù)上傳,需設(shè)置為。使用上傳,無(wú)需設(shè)置。 項(xiàng)目結(jié)構(gòu)為前后端分離,中間布了一層node。 文件上傳 要求:將文件信息等發(fā)送到后臺(tái)。 html代碼 客戶端上傳文件時(shí)的信息處理 可以使用FormData來(lái)異步上傳一個(gè)二進(jìn)制文件。上傳文件時(shí), 使用f...
摘要:暴露所有內(nèi)建配置,項(xiàng)目下會(huì)新增或?qū)Σ糠峙渲梦募M(jìn)行修改。開(kāi)發(fā)環(huán)境開(kāi)發(fā)時(shí),前端項(xiàng)目和后端項(xiàng)目運(yùn)行時(shí)端口端口不同,存在跨域問(wèn)題。項(xiàng)目目錄結(jié)構(gòu)優(yōu)化項(xiàng)目目錄結(jié)構(gòu)優(yōu)化開(kāi)發(fā)目錄主要是目錄,因此需要修改的目錄主要是目錄。 1 開(kāi)發(fā)環(huán)境準(zhǔn)備(windows) 1.1 安裝nodejs和npm 1) 下載nodejs安裝包:http://nodejs.org/en/download/ nodejs安...
摘要:編碼規(guī)范是獨(dú)角獸公司內(nèi)部的編碼規(guī)范,該項(xiàng)目是上很受歡迎的一個(gè)開(kāi)源項(xiàng)目,在前端開(kāi)發(fā)中使用廣泛,本文的配置規(guī)則就是以編碼規(guī)范和編碼規(guī)范作為基礎(chǔ)的。 更新時(shí)間:2019-01-22React.js create-react-app 項(xiàng)目 + VSCode 編輯器 + ESLint 代碼檢查工具 + Airbnb 編碼規(guī)范 前言 為什么要使用 ESLint 在項(xiàng)目開(kāi)發(fā)過(guò)程中,編寫符合團(tuán)隊(duì)編碼規(guī)...
閱讀 909·2021-09-09 09:32
閱讀 2849·2021-09-02 10:20
閱讀 2685·2021-07-23 11:24
閱讀 824·2019-08-30 15:54
閱讀 3631·2019-08-30 15:54
閱讀 1346·2019-08-30 11:02
閱讀 2844·2019-08-26 17:40
閱讀 1122·2019-08-26 13:55