Table des matières
页面样式
服务端保存
Maison interface Web tutoriel HTML NodeJS-图片上传(Express)_html/css_WEB-ITnose

NodeJS-图片上传(Express)_html/css_WEB-ITnose

Jun 21, 2016 am 08:59 AM

文件上传是每个网站不可避免的,最近需要做些上传图片的功能,主要解决两个问题,一个是文件上传样式和服务端路径保存,功能很简单,做起来倒是没那么简单,先从最简单的页面的上传页面的样式开始。

页面样式

Html页面默认的上传的是比较难看的,需要重做一个背景图片,通过背景图片添加上传的图片:

上传图片样式:

<div class="upload-container">                                <input type="file" name="fileToUpload" id="fileToUpload" class="fileupload" />                            </div>
Copier après la connexion

CSS样式:

.upload-container {            background-image: url(../../images/rv/add.jpg);            background-repeat: no-repeat;            width: 180px;            height: 200px;            padding-bottom: 10px;            display: inline-block;            vertical-align: middle;            .fileupload {                opacity: 0;                filter: alpha(opacity=0);                width: 200px;                height: 200px;            }        }
Copier après la connexion

Html点击上传有两种比较常用的方式iFrame上传和Ajax上传,本文采用了Ajax上传是 HTML5提出了XMLHttpRequest对象的第二版,传递文件数据主要是通过FormData实现:

$('.fileupload').change(function(event) {        /* Act on the event */        if ($('.fileupload').val().length) {            var fileName = $('.fileupload').val();            var extension = fileName.substring(fileName.lastIndexOf('.'), fileName.length).toLowerCase();            if (extension == ".jpg" || extension == ".png") {                    var data = new FormData();                    data.append('upload', $('#fileToUpload')[0].files[0]);                    $.ajax({                        url: 'apply/upload',                        type: 'POST',                        data: data,                        cache: false,                        contentType: false, //不可缺参数                        processData: false, //不可缺参数                        success: function(data) {                            console.log(data);                        },                        error: function() {                            console.log('error');                        }                    });            }         }    });
Copier après la connexion

服务端保存

NodeJS服务端保存需要使用了第三方插件

node-formidable ,npm安装地址:

npm install formidable@latest
Copier après la connexion

上传图片

var cacheFolder = 'public/images/uploadcache/';exports.upload = function(req, res) {    var currentUser = req.session.user;    var userDirPath =cacheFolder+ currentUser.id;    if (!fs.existsSync(userDirPath)) {        fs.mkdirSync(userDirPath);    }    var form = new formidable.IncomingForm(); //创建上传表单    form.encoding = 'utf-8'; //设置编辑    form.uploadDir = userDirPath; //设置上传目录    form.keepExtensions = true; //保留后缀    form.maxFieldsSize = 2 * 1024 * 1024; //文件大小    form.type = true;    var displayUrl;    form.parse(req, function(err, fields, files) {        if (err) {            res.send(err);            return;        }        var extName = ''; //后缀名        switch (files.upload.type) {            case 'image/pjpeg':                extName = 'jpg';                break;            case 'image/jpeg':                extName = 'jpg';                break;            case 'image/png':                extName = 'png';                break;            case 'image/x-png':                extName = 'png';                break;        }        if (extName.length === 0) {            res.send({                code: 202,                msg: '只支持png和jpg格式图片'            });            return;        } else {            var avatarName = '/' + Date.now() + '.' + extName;            var newPath = form.uploadDir + avatarName;            displayUrl = UPLOAD_FOLDER + currentUser.id + avatarName;            fs.renameSync(files.upload.path, newPath); //重命名            res.send({                code: 200,                msg: displayUrl            });        }    });};
Copier après la connexion

不同用户上传置放在不同的位置,根据需求来设置,当然也有可以每张图片都给不同的id编号,推荐第三方uuid插件: https://github.com/broofa/node-uuid

文件重命名:

fs.renameSync(files.upload.path, newPath); //重命名
Copier après la connexion

文件上传进度:

form.on('progress', function(bytesReceived, bytesExpected) {});
Copier après la connexion

node-formidable 有很多官方API还有很多设置的选项,本文根据需求设置了几项,有额外需求的可以参考官方地址~

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quel est le but du & lt; Progress & gt; élément? Quel est le but du & lt; Progress & gt; élément? Mar 21, 2025 pm 12:34 PM

L'article traite du HTML & lt; Progress & GT; élément, son but, son style et ses différences par rapport au & lt; mètre & gt; élément. L'objectif principal est de l'utiliser & lt; Progress & gt; pour l'achèvement des tâches et & lt; mètre & gt; pour stati

HTML est-il facile à apprendre pour les débutants? HTML est-il facile à apprendre pour les débutants? Apr 07, 2025 am 12:11 AM

HTML convient aux débutants car il est simple et facile à apprendre et peut rapidement voir les résultats. 1) La courbe d'apprentissage de HTML est fluide et facile à démarrer. 2) Il suffit de maîtriser les balises de base pour commencer à créer des pages Web. 3) Flexibilité élevée et peut être utilisée en combinaison avec CSS et JavaScript. 4) Les ressources d'apprentissage riches et les outils modernes soutiennent le processus d'apprentissage.

Quel est le but du & lt; datalist & gt; élément? Quel est le but du & lt; datalist & gt; élément? Mar 21, 2025 pm 12:33 PM

L'article traite du HTML & lt; Datalist & GT; élément, qui améliore les formulaires en fournissant des suggestions de saisie semi-automatique, en améliorant l'expérience utilisateur et en réduisant les erreurs. COMMANDE COMPRES: 159

Quel est le but du & lt; mètre & gt; élément? Quel est le but du & lt; mètre & gt; élément? Mar 21, 2025 pm 12:35 PM

L'article traite du HTML & lt; mètre & gt; élément, utilisé pour afficher des valeurs scalaires ou fractionnaires dans une plage, et ses applications courantes dans le développement Web. Il différencie & lt; mètre & gt; De & lt; Progress & gt; et ex

Quelle est la balise Meta de la fenêtre? Pourquoi est-ce important pour une conception réactive? Quelle est la balise Meta de la fenêtre? Pourquoi est-ce important pour une conception réactive? Mar 20, 2025 pm 05:56 PM

L'article traite de la balise Meta de la fenêtre, essentielle pour la conception Web réactive sur les appareils mobiles. Il explique comment une utilisation appropriée garantit une mise à l'échelle optimale du contenu et une interaction utilisateur, tandis que la mauvaise utilisation peut entraîner des problèmes de conception et d'accessibilité.

Quel est le but du & lt; iframe & gt; étiqueter? Quelles sont les considérations de sécurité lorsque vous l'utilisez? Quel est le but du & lt; iframe & gt; étiqueter? Quelles sont les considérations de sécurité lorsque vous l'utilisez? Mar 20, 2025 pm 06:05 PM

L'article traite du & lt; iframe & gt; L'objectif de Tag dans l'intégration du contenu externe dans les pages Web, ses utilisations courantes, ses risques de sécurité et ses alternatives telles que les balises d'objet et les API.

Les rôles de HTML, CSS et JavaScript: responsabilités de base Les rôles de HTML, CSS et JavaScript: responsabilités de base Apr 08, 2025 pm 07:05 PM

HTML définit la structure Web, CSS est responsable du style et de la mise en page, et JavaScript donne une interaction dynamique. Les trois exercent leurs fonctions dans le développement Web et construisent conjointement un site Web coloré.

Comprendre HTML, CSS et JavaScript: un guide pour débutant Comprendre HTML, CSS et JavaScript: un guide pour débutant Apr 12, 2025 am 12:02 AM

WebDevelopmentReliesOnHTML, CSS, etjavascript: 1) HTMLSTRUCTURESCONTENT, 2) CSSSTYLESIT, et3) JavascriptAdddsInterActivity, Forming TheasisofmodernweBEBExperiences.

See all articles