摘要:原文首發博主經過實踐,這里給出兩種處理用戶上傳圖片的方法,前后端代碼皆有前端后端的中間件提交告訴不要去處理發送的數據告訴不要去設置請求頭后端代碼用初始化項目之后,新建一個路由文件路由設置上傳的圖片文件存放的地方為根目錄下的文件夾
原文首發:https://shuirong.github.io/
博主經過實踐,這里給出兩種處理用戶上傳圖片的方法,前后端代碼皆有.
1. 前端jQuery,后端Express的Multer中間件
index.html
fontend.js
function deal(){ let file = new FormData(document.getElementById("picForm")); file.append("CustomField", "This is some extra data"); $.ajax({ url: "/update", type: "POST", data: file, processData: false, /* 告訴jQuery不要去處理發送的數據*/ contentType: false /* 告訴jQuery不要去設置Content-Type請求頭*/ }); }
backend.js
/*后端代碼:用express初始化項目之后,新建一個路由文件.路由update. update.js */ var express = require("express"); var router = express.Router(); var multer = require("multer"); var upload = multer({ dest: "uploads/" /*設置上傳的圖片/文件存放的地方為根目錄下的uploads文件夾*/ }); /*single(fieldName) 中的fieldName必須和HTML中input的屬性name的值一樣*/ router.post("/",upload.single("avatar"),function(req,res,next) { console.log(req.file); /* req.file 是 `logo` 文件的信息*/ console.log(req.body); /* req.body 保存表單文本域數據, 如果存在的話*/ res.send("Upload Done !"); }); module.exports = router;
多圖片上傳
和單圖上傳并預覽基本一個套路.
/*其他地方和上面的一樣. update.js*/ router.post("/",upload.array("avatars",3),function(req,res,next) { console.log(req.files); /* req.files 是 `avatars` 文件數組的信息*/ console.log(req.body); /* req.body 保存表單文本域數據, 如果存在的話*/ res.send("Upload Done !"); });
2. 前后端皆原生JS
前端把圖片轉換成base64格式,后端再轉成二進制數據(存成圖片)
index.html
fontend.js
inputChange(e) { const files = e.target.files[0]; const reader = new FileReader(); reader.onload = (ee) => { const data = { base64: ee.target.result, }; post(this.uploadUrl, data).then((res) => { // 根據返回數據做些處理. }).catch((err) => { console.info("Error", err); }); }; reader.readAsDataURL(files); } /* 這里把xhr的post給封裝了 */ post(url, data) { return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); xhr.onreadystatechange = () => { if (xhr.readyState === 4) { if (xhr.status >= 200 && (xhr.status < 300 || xhr.status === 304)) { resolve(JSON.parse(xhr.responseText)); } else { reject(`XHR unsuccessful:${xhr.status}`); } } }; xhr.open("post", url, true); xhr.setRequestHeader("content-type", "application/json"); xhr.send(JSON.stringify(data)); }); }
backend.js
const express = require("express"); const router = express.Router(); const fs = require("fs"); router.route("/") .post(upload.single("image"), (req, res) => { let base64 = req.body.base64; //去掉base64數據最前面的"圖片類型"字符串 let type = base64.match(/^data:image/(.+);/)[1]; base64 = base64.replace(/^data:image/w+;base64,/, ""); // 解碼base64成二進制數據. let data = new Buffer(base64, "base64"); const name = `uploads/images/${String(new Date()).replace(/[ :]/g,"").match(/.{6}(.{12})/)[1]}.${type}`; fs.open(name, "a", 0644, function(e, fd) { if (e) throw e; fs.write(fd, data, function(e) { if (e) throw e; fs.closeSync(fd); res.json({ "path": name.replace("uploads", ""), }); }); }); }); module.exports = router;
PS: 關于美化文件上傳按鈕,一個思路就是設置input的opacity為0,然后在外面包裹一個div.
PPS: CSS的奇技淫巧還是很多的.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/86990.html
摘要:目前覺得對我有用的是和。后者可以在本地調試頁面,對于手機頁面尤其有用。這次主要說一下,我并沒有實現所有的功能,只是實現單圖片上傳這一個功能,其他的再摸索嘍。目前就這樣,下次弄出來了多圖片上傳我再接著更新。 這兩天在看《nodejs權威指南》,這本書看了好久了,但是讀的一直不細,這次才好好看了一遍。 收獲還是蠻多的,主要在于wenpack使用的一些細節問題,有點茅塞頓悟的體驗吧,另外在n...
摘要:對象包含表單的文本域信息,或對象包含對象表單上傳的文件信息。是文件的信息前端傳遞的文件類型在中獲取將具有文本域數據,如果存在的話。 node.js實現formdata上傳文件 1.關于formdata XMLHttpRequest Level 2 添加了一個新的接口——FormData。利用 FormData 對象,我們可以通過 JavaScript 用一些鍵值對來模擬一系列表單控件,...
摘要:前言本期的主題是在中如何實現文件上傳。文件上傳解決方案目前比較主流的解決方案就是表單或者和表單來實現。文件上傳解決方案表單利用表單組件進行文件上傳是遠古時期就一直在用的方法而且還真經久不衰,厲害了。 終于抽出時間來繼續更新自己的博客,最近忙得夠嗆...對于該系列博客不知道大家有沒有這樣的看法,對于React常見的基礎東西并沒有過多或者詳細列出,感覺有點不符合系列標題。的確,筆者一開始也...
摘要:把文件上傳路徑指定到然后用當前日期和文件名命名上傳過來的文件。后端利用建立服務器,利用中間件指定文件路徑。利用這個前端和后端技術,我們基本上就可以做出一個圖片上傳存儲的基本網站核心。 前幾天看了騰訊云社區的一個文件上傳的文章文件上傳那些事兒,大體上講了以下h5中圖片上傳的幾個核心原理,但是沒有后端接受的服務器代碼,沒法做測試。也沒有具體的一個實例都是一些基本的原理片段,并且ui界面也不...
摘要:前段時間面試過程中,頻繁遇到異步文件上傳的相關問題。所以,這會是一個拖放接口實現文件異步上傳的完整。監聽放置元素的事件,通過對象可以獲得拖拽事件的狀態及數據。后端文件接收保存后端使用實現文件上傳。 ??前段時間面試過程中,頻繁遇到H5異步文件上傳的相關問題。還遇到過一個通過H5拖放功能實現文件異步上傳的問題,大概知道H5有新增拖拽功能可以接收文件,如何異步上傳文件就母雞了(攤手)。面試...
閱讀 4396·2021-11-24 10:24
閱讀 1421·2021-11-22 15:22
閱讀 2052·2021-11-17 09:33
閱讀 2458·2021-09-22 15:29
閱讀 527·2019-08-30 15:55
閱讀 1667·2019-08-29 18:42
閱讀 2744·2019-08-29 12:55
閱讀 1785·2019-08-26 13:55