Jadual Kandungan
Lihat data permintaan
Proses data fail (imej)
Dapatkan sempadan pembatas
Ringkasan
Rumah hujung hadapan web tutorial js Analisis ringkas tentang cara modul http dalam Node mengendalikan muat naik fail

Analisis ringkas tentang cara modul http dalam Node mengendalikan muat naik fail

Mar 09, 2023 pm 07:37 PM
node modul http

Bagaimana untuk menggunakan modul http Node.js untuk memproses muat naik fail? Artikel berikut akan melihat cara memproses fail yang dimuat naik oleh bahagian hadapan pada bahagian pelayan. Saya harap ia akan membantu semua orang!

Analisis ringkas tentang cara modul http dalam Node mengendalikan muat naik fail

Lihat data permintaan

Jika data yang kami hantar ke pelayan sekarang adalah seperti yang ditunjukkan dalam rajah di bawah, ia mengandungi biasa maklumat medan name dan fail imej file:

Analisis ringkas tentang cara modul http dalam Node mengendalikan muat naik fail

Mari lihat dahulu cara menerima data muat naik fail pada pelayan dan mencetaknya pada konsol penyahpepijatan:

const http = require('http')
const server = http.createServer((req, res) => {
  req.setEncoding('binary')
  req.on('data', data => {
    console.log(data)
  })
  req.on('end', () => {
    console.log('上传结束')
    res.end('上传成功')
  })
})
server.listen(3010, () => console.log('服务器开启'))
Salin selepas log masuk

Untuk memahami hasil cetakan, kami menetapkan pengekodan aksara kepada req.setEncoding('binary') melalui 'binary', supaya data yang diperolehi bukan objek penimbal tetapi rentetan yang dikodkan ASCII Kami akan Anda boleh gunakan beberapa kaedah rentetan untuk memproses data.

Tetapi apabila saiz fail agak besar, data yang diperoleh tidak dapat dipaparkan sepenuhnya pada konsol dengan menaip terus nod atau nodemon pada baris arahan untuk menjalankan kod. Jadi kita boleh meletakkan titik putus di mana kita ingin mencetak data permintaan dan menjalankan kod melalui mod nyahpepijat:

Analisis ringkas tentang cara modul http dalam Node mengendalikan muat naik fail

Selepas mengklik "Jalankan dan Nyahpepijat", vs kod akan membantu Kami menjalankan pelayan:

Analisis ringkas tentang cara modul http dalam Node mengendalikan muat naik fail

Selepas itu, apabila kami menghantar permintaan muat naik, klik "Single Step Skip" di sudut kanan atas gambar di bawah untuk melihat permintaan . Data - maklumat yang boleh disusun oleh ASCII, seperti huruf Inggeris, boleh dilihat secara langsung, manakala data gambar adalah sekumpulan aksara bercelaru:

Analisis ringkas tentang cara modul http dalam Node mengendalikan muat naik fail

The langkah seterusnya ialah Memproses data permintaan yang diperoleh, memintas data imej di dalam dan kemudian menjana imej dengan menulis ke strim.

Proses data fail (imej)

Dapatkan data imej

Kerana boleh Peristiwa strim baca 'data' boleh membaca sehingga 64kb data pada satu masa Apabila imej besar, ia mungkin dicetuskan beberapa kali, jadi kami mentakrifkan pembolehubah reqData untuk menyimpan data yang dihantar oleh. permintaan:

let reqData = ''
req.on('data', data => {
  reqData += data
})
req.on('end', () => {
  console.log(reqData) // 在这行打断点
  res.end('上传成功')
})
Salin selepas log masuk

Apabila req mencetuskan acara 'end', ia menunjukkan bahawa data yang diminta telah dibaca Jika anda menetapkan titik putus pada console.log(reqData) dalam baris 6 kod di atas, dan kemudian lihat reqData, data yang diperoleh adalah seperti berikut:

Analisis ringkas tentang cara modul http dalam Node mengendalikan muat naik fail

Data gambar hendaklah bahagian antara image/pngrnrn dan rn----------------------------158329774739626517859573--rn. Kita boleh mendapatkan indeks kedudukan permulaan (imgDataStartIndex) dan penamat (imgDataEndIndex) bagi data imej, kemudian gunakan substring() untuk membuat pemintasan, dan akhirnya gunakan kaedah trim() untuk mengalih keluar ruang pertama rn:

const imgType = 'image/png'
const imgDataStartIndex = reqData.indexOf(imgType) + imgType.length
const imgDataEndIndex = reqData.indexOf(`--${boundary}--`)
const imgData = reqData.substring(imgDataStartIndex, imgDataEndIndex).trim()
Salin selepas log masuk

Dapatkan sempadan pembatas

--------------------------158329774739626517859573 ialah pembatas (sempadan) yang dijana secara rawak oleh pelanggan dan digunakan untuk memisahkan setiap bahagian data dalam borang. Setiap item borang mempunyai permulaan dan penghujung, dan dua tanda tolak -- ditambah di hadapan permulaan, dan dua tanda tolak ditambah pada penghujung keseluruhan data borang. Semak pengepala permintaan:

Analisis ringkas tentang cara modul http dalam Node mengendalikan muat naik fail

Anda boleh mendapati bahawa content-type ditakrifkan dalam boundary, jadi kita boleh menggunakan kaedah berikut untuk mendapatkan pemisah:

const boundary = req.headers['content-type'].split('boundary=')[1]
Salin selepas log masuk

Jana imej

Selepas mendapatkan data imejimgData, anda boleh menulis fail untuk menjana imej melalui fs's writeFile() :

fs.writeFile('./img.png', imgData, 'binary', err => {
  if (!err) console.log('图片写入成功')
})
Salin selepas log masuk

Perhatikan bahawa anda perlu memasukkan 'binary' dalam parameter ketiga untuk menetapkan encoding.

Ringkasan

Kod tersebut kini diringkaskan seperti berikut:

const http = require('http')
const fs = require('fs')

const server = http.createServer((req, res) => {
  req.setEncoding('binary')
  const boundary = req.headers['content-type'].split('boundary=')[1]
  let reqData = ''
  req.on('data', data => {
    reqData += data
  })
  req.on('end', () => {
    const imgType = 'image/png'
    const imgDataStartIndex = reqData.indexOf(imgType) + imgType.length
    const imgDataEndIndex = reqData.indexOf(`--${boundary}--`)
    const imgData = reqData.substring(imgDataStartIndex, imgDataEndIndex).trim()
    fs.writeFile('./img.png', imgData, 'binary', err => {
      if (!err) console.log('图片写入成功')
    })
    res.end('上传成功')
  })
})

server.listen(3010, () => console.log('服务器开启'))
Salin selepas log masuk

上述代码能够成功运行还有一些限制,比如只能处理单文件上传,且文件需要是 png 格式的图片,并且放在表单最后一项。文章的目的在于简单了解使用 node 的 http 模块搭建的服务器大体上是如何处理上传文件的请求的,为将来深入学习其它基于 http 模块的框架(express.js、koa.js 等)打好基础。

更多node相关知识,请访问:nodejs 教程

Atas ialah kandungan terperinci Analisis ringkas tentang cara modul http dalam Node mengendalikan muat naik fail. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk memadam nod dalam nvm Bagaimana untuk memadam nod dalam nvm Dec 29, 2022 am 10:07 AM

Cara memadam nod dengan nvm: 1. Muat turun "nvm-setup.zip" dan pasangkannya pada pemacu C 2. Konfigurasikan pembolehubah persekitaran dan semak nombor versi melalui arahan "nvm -v" 3. Gunakan "nvm arahan install" Pasang nod; 4. Padamkan nod yang dipasang melalui arahan "nvm uninstall".

Cara menggunakan ekspres untuk mengendalikan muat naik fail dalam projek nod Cara menggunakan ekspres untuk mengendalikan muat naik fail dalam projek nod Mar 28, 2023 pm 07:28 PM

Bagaimana untuk mengendalikan muat naik fail? Artikel berikut akan memperkenalkan kepada anda cara menggunakan ekspres untuk mengendalikan muat naik fail dalam projek nod saya harap ia akan membantu anda!

Bagaimana untuk melakukan pencerminan Docker perkhidmatan Node? Penjelasan terperinci tentang pengoptimuman melampau Bagaimana untuk melakukan pencerminan Docker perkhidmatan Node? Penjelasan terperinci tentang pengoptimuman melampau Oct 19, 2022 pm 07:38 PM

Dalam tempoh ini, saya sedang membangunkan perkhidmatan dinamik HTML yang biasa kepada semua kategori dokumen Tencent Untuk memudahkan penjanaan dan penggunaan akses kepada pelbagai kategori, dan untuk mematuhi trend beralih ke awan, saya sedang mempertimbangkan. menggunakan Docker untuk membetulkan kandungan perkhidmatan dan mengurus versi produk secara seragam. Artikel ini akan berkongsi pengalaman pengoptimuman yang saya kumpulkan dalam proses perkhidmatan Docker untuk rujukan anda.

Analisis mendalam tentang alat pengurusan proses Node 'pm2' Analisis mendalam tentang alat pengurusan proses Node 'pm2' Apr 03, 2023 pm 06:02 PM

Artikel ini akan berkongsi dengan anda alat pengurusan proses Node "pm2", dan bercakap tentang mengapa pm2 diperlukan, cara memasang dan menggunakan pm2, saya harap ia akan membantu semua orang!

PI Node Teaching: Apakah nod pi? Bagaimana cara memasang dan menyediakan nod pi? PI Node Teaching: Apakah nod pi? Bagaimana cara memasang dan menyediakan nod pi? Mar 05, 2025 pm 05:57 PM

Penjelasan dan Panduan Pemasangan Terperinci untuk Pinetwork Nodes Artikel ini akan memperkenalkan ekosistem pinetwork secara terperinci - nod pi, peranan utama dalam ekosistem pinetwork, dan menyediakan langkah -langkah lengkap untuk pemasangan dan konfigurasi. Selepas pelancaran Rangkaian Ujian Blockchain Pinetwork, nod PI telah menjadi bahagian penting dari banyak perintis yang aktif mengambil bahagian dalam ujian, bersiap sedia untuk pelepasan rangkaian utama yang akan datang. Jika anda tidak tahu kerja pinet, sila rujuk apa itu picoin? Berapakah harga untuk penyenaraian? Penggunaan PI, perlombongan dan analisis keselamatan. Apa itu Pinetwork? Projek Pinetwork bermula pada tahun 2019 dan memiliki syiling pi cryptocurrency eksklusifnya. Projek ini bertujuan untuk mewujudkan satu yang semua orang boleh mengambil bahagian

Mari kita bincangkan tentang cara menggunakan pkg untuk membungkus projek Node.js ke dalam fail boleh laku. Mari kita bincangkan tentang cara menggunakan pkg untuk membungkus projek Node.js ke dalam fail boleh laku. Dec 02, 2022 pm 09:06 PM

Bagaimana untuk membungkus fail boleh laku nodejs dengan pkg? Artikel berikut akan memperkenalkan kepada anda cara menggunakan pkg untuk membungkus projek Node ke dalam fail boleh laku. Saya harap ia akan membantu anda!

Apa yang perlu dilakukan jika npm nod gyp gagal Apa yang perlu dilakukan jika npm nod gyp gagal Dec 29, 2022 pm 02:42 PM

npm node gyp gagal kerana versi "node-gyp.js" dan "Node.js" tidak sepadan Penyelesaiannya: 1. Kosongkan cache nod melalui "npm cache clean -f" 2. Melalui "npm install -. g n" Pasang modul n; 3. Pasang versi "nod v12.21.0" melalui arahan "n v12.21.0".

Apakah sistem log masuk tunggal? Bagaimana untuk melaksanakannya menggunakan nodejs? Apakah sistem log masuk tunggal? Bagaimana untuk melaksanakannya menggunakan nodejs? Feb 24, 2023 pm 07:33 PM

Apakah sistem log masuk tunggal? Bagaimana untuk melaksanakannya menggunakan nodejs? Artikel berikut akan memperkenalkan kepada anda cara menggunakan nod untuk melaksanakan sistem log masuk tunggal. Saya harap ia akan membantu anda!

See all articles