Tải lên video nodejs express
Xin chào các bạn. hôm nay mình sẽ hướng dẫn các bạn viết một Node. js server đơn giản để tải ảnh lên, sau đó chúng ta sẽ viết một Ứng dụng Android để tải ảnh lên Mã có sẵn tại. https. //github. com/hoc081098/Upload-Image-Node. js Video direction at. https. //www. youtube. com/watch?v=pL5Ci_lfxlw&t=3s 1. Điều kiện tiên quyết
Sử dụng Robomongo để tạo nền tảng MongoDB mới có tên là upload-image. Sau đó nhấp chuột phải vào cơ sở dữ liệu đã tạo và chọn Open Shell. Gõ đoạn mã sau vào shell
Đoạn mã trên làm cho tên trường là duy nhất, tương tự như từ khóa chính trong cơ sở dữ liệu quan hệ như MySQL 3. Tạo dự ánTạo 1 thư mục tên NodeUploadImage. Use terminal (hoặc Command Prompt trong hệ điều hành Windows), cd to the new directory.
Chúng ta có 2 tệp
Chúng ta định nghĩa lược đồ imageModel có 3 trường
hoàn chỉnh mã Tệp này chứa văn bản Unicode hai chiều có thể được diễn giải hoặc biên dịch khác với nội dung hiển thị bên dưới. Để xem lại, hãy mở tệp trong trình chỉnh sửa hiển thị các ký tự Unicode bị ẩn. Tìm hiểu thêm về các ký tự Unicode hai chiều Hiển thị ký tự ẩn const mongoose = yêu cầu('mongoose')mongoose.Lời hứa = toàn cầu. Lời hứaconst lược đồ = new . mongoose.Lược đồ({tên . Chuỗi,đường dẫn_hình ảnh . Chuỗi,created_at . {loại . Ngày,mặc định . Ngày. bây giờ}})const . //máy chủ cục bộ. 27017/upload-image' mongoDb = 'mongodb://localhost:27017/upload-image'mongoose. kết nối(mongoDb)mô-đun . .xuất khẩu = cầy mangut. mô hình('mô hình hình ảnh', schema)xem raw được lưu trữ với ❤ bởi GitHub 6. chỉ mục tệp. jshoàn chỉnh mã Tệp này chứa văn bản Unicode hai chiều có thể được diễn giải hoặc biên dịch khác với nội dung hiển thị bên dưới. Để xem lại, hãy mở tệp trong trình chỉnh sửa hiển thị các ký tự Unicode bị ẩn. Tìm hiểu thêm về các ký tự Unicode hai chiều Hiển thị ký tự ẩn const express = require('express')const app = express()const router = express.Bộ định tuyến()const đường dẫn . /image_model' = require('path')const fileType = require('file-type')const multer = require('multer')const fs = require('fs')const imagemodel = require('./image_model')ứng dụng. sử dụng(yêu cầu(' . //máy chủ cục bộ. 27017/upload-image)('combined'))//mongodb://localhost:27017/upload-imageconst upload = multer({dest: 'hình ảnh/',bộ lọc tệp . (yêu cầu, tệp, . callback) => {if (!/\S+\. ( jpg . bmp . gif . png )/ gi. thử nghiệm(tệp. tên gốc)) {return . callback(Error('Invalid image file name'), false)}const reqName = req.tham số. image_nameimagemodel. tìm({ tên . reqName }). giới hạn(1). exec((err, . res) => {if (err) {console.log(err)return . callback(err, false)}if (res.độ dài === 0) callback(null, true)else callback(Error(`Image with name: "${reqName} " tồn tại`), false)})}}).đơn('hình ảnh')router.bài đăng('/images/upload/. image_name', (req, res) => {console.log(`Đăng. req = ${req} `)upload(req, res, (err) => {if (err) {res.trạng thái(400). json({ thông báo . err. thông báo })trả về} . const reqName = req.tham số. image_nameconst imagePath = path . .tham gia('hình ảnh', req.tệp. tên tệp)const mô hình = . new imagemodel({name: reqName,image_path . đường dẫn hình ảnh,created_at . mới Ngày()} . )model.lưu((err) . => {if (err) {console.log(err)return . res.trạng thái(500). json({thông báo . err. thông báo})}res . .trạng thái(200). json({ thông báo . `Hình ảnh đã tải lên " ${reqName}" successfully` })})})})router.lấy('/images/. image_name', (req, res) => {console.log(`Nhận. req = ${req} `)imagemodel.tìm({tên . yêu cầu. tham số. image_name}, {image_path . : 1, _id . 0}). giới hạn(1). exec((err, . docs) => {if (err) {console.log(err)return . res.trạng thái(500). json({thông báo . err. thông báo})}nếu . (docs.độ dài === 0) < . return res.trạng thái(404). json({ thông báo . 'Không có tệp hình ảnh như vậy' })}const imagePath = path.tham gia(__dirname, tài liệu . [0].image_path)thử {const . buffer = fs.readFileSync(imagePath)const . mime = fileType(buffer).kịch bảnres. writeHead(200, { . 'Content-Type': kịch bản })res. kết thúc(bộ đệm, ' . )} catch (error) {console.log(lỗi. mã)nếu (lỗi . .mã === 'ENOENT') {res.trạng thái(404). json({ thông báo . 'Không có tệp hình ảnh nào như vậy' })} else {res.trạng thái(500). json({ thông báo . lỗi. thông báo })}} . })})router.lấy('/hình ảnh', (req, res) => {console.log(`Nhận. req = ${req} `)const start = parseInt(req.truy vấn. bắt đầu) . 0const limit = parseInt . (req.truy vấn. giới hạn) . 20mô hình hình ảnh. tìm({}, . { name: 1, _id . 0 }). sắp xếp({ created_at . -1 }). bỏ qua(bắt đầu). giới hạn(giới hạn). exec((err, . docs) => {if (err) {console.log(err)return . res.trạng thái(500). json({thông báo . err. thông báo, dữ liệu . null})}res . .trạng thái(200). json({thông báo . 'Nhận dữ liệu thành công',dữ liệu . tài liệu. bản đồ(e => . .tên)})} . )})router.bài đăng("/test", (req, res) => {res.trạng thái(200). gửi("Rất vui")})app.sử dụng('/', router)app.nghe(3001, ( . ) => {console.log('Máy chủ đang chạy ở cổng 3001')})xem raw được lưu trữ với ❤ bởi GitHub Chúng ta định nghĩa các điểm cuối
6. 1. ĐĂNG /hình ảnh/tải lên/. Tên Hình ảnhTa sử dụng bộ lọc để tạo chức năng tải lên. with thư mục lưu ảnh là đích. ‘images/’, fileFilter để lọc những tập tin hợp lệ |