Saya membuat fungsi unggah file di node.js dengan express 3.
Saya ingin mengambil ekstensi file gambar. jadi saya bisa mengganti nama file dan kemudian menambahkan ekstensi file untuk itu.
app.post('/upload', function(req, res, next) {
var is = fs.createReadStream(req.files.upload.path),
fileExt = '', // I want to get the extension of the image here
os = fs.createWriteStream('public/images/users/' + req.session.adress + '.' + fileExt);
});
Bagaimana saya bisa mendapatkan ekstensi gambar di node.js?
javascript
node.js
file-type
georgesamper
sumber
sumber
Jawaban:
Saya yakin Anda dapat melakukan hal berikut untuk mendapatkan ekstensi nama file.
sumber
app.css.gz
hanya akan kembali.gz
dan tidak.css.gz
, yang mungkin atau mungkin tidak seperti yang Anda inginkan.filename.split('.').pop();
.
.'filename.css.gz'.split('.').slice(1).join('.')
untuk mendapatkan semua ekstensijone.lastTest.654654556.tar.gz
sini ekstensi yang diharapkan adalah tar.gz tetapi jika Anda menerapkan fungsi apa pun yang memberikan bentuk 1 titik, itu tidak akan berfungsi seperti yang Anda lihatMemperbarui
Karena jawaban awal, extname () telah ditambahkan ke
path
modul, lihat jawaban SnowfishJawaban asli:
Saya menggunakan fungsi ini untuk mendapatkan ekstensi file, karena saya tidak menemukan cara untuk melakukannya dengan cara yang lebih mudah (tapi saya rasa ada):
Anda harus meminta 'jalur' untuk menggunakannya.
metode lain yang tidak menggunakan modul path:
sumber
var is = fs.createReadStream(req.files.upload.path), fileType = is.path.split(/[. ]+/).pop();
Jika Anda menggunakan express, tambahkan baris berikut saat mengkonfigurasi middleware (bodyParser)
sumber
Jauh lebih efisien menggunakan
substr()
metode daripadasplit()
&pop()
Lihat perbedaan kinerja di sini: http://jsperf.com/remove-first-character-from-string
Pembaruan Agustus 2019 Seperti yang ditunjukkan oleh @xentek di komentar;
substr()
sekarang dianggap sebagai fungsi warisan ( dokumentasi MDN ). Anda bisa menggunakannyasubstring()
. Perbedaan antarasubstr()
dansubstring()
adalah bahwa argumen keduasubstr()
adalah panjang maksimum untuk kembali sedangkan argumen keduasubstring()
adalah indeks untuk berhenti (tanpa termasuk karakter itu). Juga,substr()
menerima posisi awal negatif untuk digunakan sebagai offset dari ujung string sementarasubstring()
tidak.sumber
substr
itu dianggap sebagai fungsi warisan dan harus dihindari jika memungkinkan - Informasi lebih lanjut tentang MDNSolusi ini mendukung querystrings!
sumber
Solusi sederhana tanpa perlu untuk yang memecahkan masalah ekstensi beberapa periode:
Atau jika Anda tidak ingin titik utama:
Pastikan untuk menguji apakah file tersebut juga memiliki ekstensi.
sumber
Saya pikir pemetaan header Tipe-Konten dalam permintaan juga akan berfungsi. Ini akan berfungsi bahkan untuk kasus-kasus ketika Anda mengunggah file tanpa ekstensi. (saat nama file tidak memiliki ekstensi dalam permintaan)
Anggap Anda mengirim data Anda menggunakan HTTP POST:
Di sini nama Content-Type header berisi tipe pantomim data. Memetakan tipe mime ini ke ekstensi akan membuat Anda mendapatkan ekstensi file :).
Restify BodyParser mengonversi tajuk ini menjadi properti dengan jenis nama
Anda dapat menggunakan header ini dan melakukan pemetaan ekstensi (substring dll ...) secara manual, tetapi ada juga pustaka siap pakai untuk ini. Di bawah dua adalah hasil teratas ketika saya melakukan pencarian google
dan penggunaannya juga sederhana:
cuplikan di atas akan mencetak png ke konsol.
sumber
sumber
path.extname
akan melakukan trik dalam banyak kasus. Namun, itu akan mencakup semuanya setelah yang terakhir.
, termasuk string kueri dan fragmen hash dari permintaan http:Dalam keadaan seperti itu, Anda ingin mencoba sesuatu seperti ini:
Perhatikan bahwa ekstensi dengan beberapa periode (seperti
.tar.gz
), tidak akan berfungsi sama sekalipath.extname
.sumber
Fungsi berikut memecah string dan mengembalikan nama dan ekstensi tidak peduli berapa banyak titik yang ada di ekstensi. Ini mengembalikan string kosong untuk ekstensi jika tidak ada. Nama yang dimulai dengan titik dan / atau ruang putih juga berfungsi.
sumber
impor extname untuk mengembalikan ekstensi file:
dimana file adalah file 'nama' form
sumber
Anda dapat menggunakan path.parse (path) , misalnya
sumber
Coba yang ini
sumber