From 17b1512d110bd11fc30460e6027248eac538f230 Mon Sep 17 00:00:00 2001 From: Victor Date: Wed, 24 May 2023 00:50:41 +0300 Subject: [PATCH] headers-support-utf8 --- README.md | 3 ++- doc/README-ar.md | 21 +++++++++++---------- doc/README-es.md | 3 ++- doc/README-fr.md | 7 ++++--- doc/README-ko.md | 1 + doc/README-pt-br.md | 5 +++-- doc/README-ru.md | 17 +++++++++-------- doc/README-vi.md | 2 ++ doc/README-zh-cn.md | 1 + index.js | 3 +++ lib/make-middleware.js | 8 +++++++- 11 files changed, 45 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 8c4dc4d9..ea2179fa 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,7 @@ const multer = require('multer') const upload = multer({ dest: './public/data/uploads/' }) app.post('/stats', upload.single('uploaded_file'), function (req, res) { // req.file is the name of your file in the form above, here 'uploaded_file' - // req.body will hold the text fields, if there were any + // req.body will hold the text fields, if there were any console.log(req.file, req.body) }); ``` @@ -141,6 +141,7 @@ Key | Description `fileFilter` | Function to control which files are accepted `limits` | Limits of the uploaded data `preservePath` | Keep the full path of files instead of just the base name +`defParamCharset` | For multipart forms, the default character set to use for values of part header parameters (e.g. filename) that are not extended parameters (that contain an explicit charset). **Default**: `'latin1'`. In an average web app, only `dest` might be required, and configured as shown in the following example. diff --git a/doc/README-ar.md b/doc/README-ar.md index 5497865f..dca915af 100644 --- a/doc/README-ar.md +++ b/doc/README-ar.md @@ -7,7 +7,7 @@ **ملاحظة**: لن يقوم Multer بمعالجة أي شكل غير متعدد الأجزاء (`multipart/form-data`). -## الترجمات +## الترجمات هذا الملف متاح أيضًا بلغات أخرى: @@ -101,18 +101,18 @@ app.post('/profile', upload.none(), function (req, res, next) { مفتاح | وصف | ملاحظة --- | --- | --- -`fieldname` | اسم المُدخَل المحدد في الإستمارة | -`originalname` | اسم الملف على كمبيوتر المستخدم | -`encoding` | نوع تشفير الملف | -`mimetype` | نوع ملف ملحقات بريد إنترنت متعددة الأغراض ( MIME ) | -`size` | حجم الملف بالبايت | +`fieldname` | اسم المُدخَل المحدد في الإستمارة | +`originalname` | اسم الملف على كمبيوتر المستخدم | +`encoding` | نوع تشفير الملف | +`mimetype` | نوع ملف ملحقات بريد إنترنت متعددة الأغراض ( MIME ) | +`size` | حجم الملف بالبايت | `destination` | المجلد الذي تم حفظ الملف إليه | `تخزين على الاسطوانة` (`DiskStorage`) `filename` | اسم الملف داخل "الوجهة" ( `destination` ) | `تخزين على الاسطوانة` (`DiskStorage`) `path` | المسار الكامل للملف الذي تم تحميله | `تخزين على الاسطوانة` (`DiskStorage`) `buffer` | "ذاكرة" (`Buffer`) للملف بأكمله | `تخزين على الذاكرة ` (`MemoryStorage`) -### `multer(opts)` +### `multer(opts)` يقبل Multer كائن الخيارات ، وأهمها خاصية `dest`، والتي تحدد مكان تحميل الملفات. في حال حذفت كائن الخيارات ، سيتم الاحتفاظ بالملفات في الذاكرة ولن تتم كتابتها مطلقًا على القرص. @@ -122,10 +122,11 @@ app.post('/profile', upload.none(), function (req, res, next) { مفتاح | وصف --- | --- -`dest` أو `storage` | مكان لتخزين الملفات +`dest` أو `storage` | مكان لتخزين الملفات `fileFilter` | دالة للسيطرة على الملفات التي يتم قبولها -`limits` | حدود البيانات التي تم تحميلها -`preservePath` | الاحتفظ بالمسار الكامل للملفات بدلاً من الاسم الأساسي +`limits` | حدود البيانات التي تم تحميلها +`preservePath` | الاحتفظ بالمسار الكامل للملفات بدلاً من الاسم الأساسي +`defParamCharset` | للنماذج multipart الأجزاء ، default character set المستخدمة للرؤوس (مثل اسم filename). **Default**: `'latin1'`. في تطبيق ويب متوسط ​​، قد تكون هناك حاجة فقط إلى `dest`، وتكوينها كما هو موضح في المثال التالي : diff --git a/doc/README-es.md b/doc/README-es.md index 32e7d5fc..958b77e8 100644 --- a/doc/README-es.md +++ b/doc/README-es.md @@ -84,7 +84,7 @@ Este es un ejemplo de cómo se utiliza multer en un formulario HTML. Presta espe
- +
``` @@ -135,6 +135,7 @@ Clave (key) | Descripción `fileFilter` | Función para controlar qué archivos son aceptados `limits` | Límites de los datos subidos `preservePath` | Mantiene la ruta completa de la ubicación de los archivos, en vez de sólo sus nombres +`defParamCharset` | Para formularios de multipart, se utiliza el character set predeterminado para los encabezados (como el nombre de filename). **Default**: `'latin1'`. En la aplicación web promedio es probable que sólo se requiera `dest`, siendo configurado como en el siguiente ejemplo: diff --git a/doc/README-fr.md b/doc/README-fr.md index 3f3f2150..076ec816 100644 --- a/doc/README-fr.md +++ b/doc/README-fr.md @@ -1,6 +1,6 @@ # Multer [![Build Status](https://travis-ci.org/expressjs/multer.svg?branch=master)](https://travis-ci.org/expressjs/multer) [![NPM version](https://badge.fury.io/js/multer.svg)](https://badge.fury.io/js/multer) [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://github.com/feross/standard) -Multer est un middleware node.js pour la gestion des données `multipart/form-data` qui est principalement utilisé pour télécharger des fichiers. +Multer est un middleware node.js pour la gestion des données `multipart/form-data` qui est principalement utilisé pour télécharger des fichiers. Il est écrit au-dessus de [busboy](https://github.com/mscdex/busboy) pour une efficacité maximale. **NOTE**: Multer ne traitera aucun formulaire qui ne soit pas un multipart (`multipart/form-data`). @@ -87,7 +87,7 @@ Voici un exemple d'utilisation de multer dans un formulaire HTML. Faites particu
- +
``` @@ -137,6 +137,7 @@ Clé | Description `fileFilter` | Fonction pour contrôler quels fichiers sont acceptés `limits` | Limites des données téléchargées `preservePath` | Conservez le chemin complet des fichiers au lieu du nom de base uniquement +`defParamCharset` | Pour les formulaires en multipart, character set par défaut utilisé pour les en-têtes (comme le filename). **Default**: `'latin1'`. Dans une application Web moyenne, seul `dest` peut être requis et configuré comme indiqué dans l'exemple suivant. @@ -232,7 +233,7 @@ doit renvoyer un nom de fichier complet avec une extension de fichier. Chaque fonction reçoit à la fois la requête (`req`) et des informations sur le dossier (`file`) pour aider à la décision. -Notez que `req.body` n'a peut-être pas encore été entièrement rempli. Cela dépend de l'ordre +Notez que `req.body` n'a peut-être pas encore été entièrement rempli. Cela dépend de l'ordre où le client transmet les champs et les fichiers au serveur. Pour comprendre la convention d'appel utilisée dans le rappel (nécessité de passer diff --git a/doc/README-ko.md b/doc/README-ko.md index 897ba529..ea6df790 100644 --- a/doc/README-ko.md +++ b/doc/README-ko.md @@ -103,6 +103,7 @@ Key | Description `fileFilter` | 어떤 파일을 허용할지 제어하는 함수 `limits` | 업로드 된 데이터의 한도 `preservePath` | 파일의 base name 대신 보존할 파일의 전체 경로 +`defParamCharset` | multipart 양식의 경우 헤더에 사용되는 기본 character set(예: 파일 filename). **Default**: `'latin1'`. 보통의 웹 앱에서는 `dest` 옵션 정도만 필요할지도 모릅니다. 설정 방법은 아래의 예제에 나와있습니다. diff --git a/doc/README-pt-br.md b/doc/README-pt-br.md index 996049b5..842c8b16 100644 --- a/doc/README-pt-br.md +++ b/doc/README-pt-br.md @@ -4,7 +4,7 @@ Multer é um middleware node.js para manipulação `multipart/form-data`, que é **NOTA**: Multer não processará nenhum formulário que não seja multipart (`multipart/form-data`). -## Traduções +## Traduções Este README também está disponível em outros idiomas: @@ -108,6 +108,7 @@ Key | Descrição `fileFilter` | Função para controlar quais arquivos são aceitos `limits` | Limites dos dados enviados `preservePath` | Mantenha o caminho completo dos arquivos em vez de apenas o nome base +`defParamCharset` | Para formulários de multipart, o character set padrão usado para headers (como filename). **Default**: `'latin1'`. Em um web app básico, somente o `dest` pode ser necessário, e configurado como mostrado no exemplo a seguir: @@ -218,7 +219,7 @@ A especificação dos limites pode ajudar a proteger seu site contra ataques de ### `fileFilter` -Defina isso para uma função para controlar quais arquivos devem ser enviados e quais devem ser ignorados. +Defina isso para uma função para controlar quais arquivos devem ser enviados e quais devem ser ignorados. A função deve ficar assim: diff --git a/doc/README-ru.md b/doc/README-ru.md index 23615c27..cfe5d302 100644 --- a/doc/README-ru.md +++ b/doc/README-ru.md @@ -4,7 +4,7 @@ Multer — это middleware для фреймворка express для обра **ВАЖНО**: Multer не обрабатывает никакой другой тип форм, кроме `multipart/form-data`. -## Переводы +## Переводы Это README также доступно на других языках: @@ -109,6 +109,7 @@ Multer принимает объект с опциями. Базовая опц `fileFilter` | Функция для контроля принятия файлов `limits` | Ограничения по загрузке `preservePath` | Сохранять полный путь к файлам вместо только базового имени +`defParamCharset` | Для multipart форм дефолтный character set, использующийся для headers (таких, как filename). **Default**: `'latin1'`. Обычно для веб-приложения нужно обязательно переопределить `dest`, как показано в примере ниже. @@ -153,7 +154,7 @@ const upload = multer({ dest: 'uploads/' }) #### `DiskStorage` -Движок дискового пространства. Дает полный контроль над размещением файлов на диск. +Движок дискового пространства. Дает полный контроль над размещением файлов на диск. ```javascript const storage = multer.diskStorage({ @@ -168,13 +169,13 @@ const storage = multer.diskStorage({ const upload = multer({ storage: storage }) ``` -Доступно две опции, расположение `destination` и имя файла `filename`. Обе эти функции определяют, где будет находиться файл после загрузки. +Доступно две опции, расположение `destination` и имя файла `filename`. Обе эти функции определяют, где будет находиться файл после загрузки. `destination` используется, чтобы задать каталог, в котором будут размещены файлы. Может быть задан строкой (например, `'/tmp/uploads'`). Если не задано расположение `destination`, операционная система воспользуется для сохранения каталогом для временных файлов. -**Важно:** Вы должны создать каталог, когда используете `destination`. При передачи в качестве аргумента строки, Multer проверяет, что каталог создан. +**Важно:** Вы должны создать каталог, когда используете `destination`. При передачи в качестве аргумента строки, Multer проверяет, что каталог создан. -`filename` используется, чтобы определить, как будет назван файл внутри каталога. Если +`filename` используется, чтобы определить, как будет назван файл внутри каталога. Если имя файла `filename` не задано, каждому файлу будет сконфигурировано случайное имя без расширения файла. **Важно:** Multer не добавляет никакого файлового расширения, ваша функция должна возвращать имя файла с необходимым расширением. @@ -191,13 +192,13 @@ const upload = multer({ storage: storage }) const storage = multer.memoryStorage() const upload = multer({ storage: storage }) ``` -Когда вы используете этот тип передачи, информация о файле будет содержать поле `buffer`, которое содержит весь файл. +Когда вы используете этот тип передачи, информация о файле будет содержать поле `buffer`, которое содержит весь файл. **ПРЕДУПРЕЖДЕНИЕ**: Загрузка очень больших файлов, или относительно небольших файлов в большом количестве может вызвать переполнение памяти. ### `limits` -Объект, устанавливающий ограничения. Multer прокидывает этот объект напрямую в busboy, поэтому детали можно посмотреть +Объект, устанавливающий ограничения. Multer прокидывает этот объект напрямую в busboy, поэтому детали можно посмотреть [на странице с методами busboy](https://github.com/mscdex/busboy#busboy-methods). Доступны следующие целочисленные значения: @@ -216,7 +217,7 @@ const upload = multer({ storage: storage }) ### `fileFilter` -Задают функцию для того, чтобы решать, какие файлы будут загружены, а какие — нет. Функция может выглядеть так: +Задают функцию для того, чтобы решать, какие файлы будут загружены, а какие — нет. Функция может выглядеть так: ```javascript function fileFilter (req, file, cb) { diff --git a/doc/README-vi.md b/doc/README-vi.md index ac045f23..fc25c93c 100644 --- a/doc/README-vi.md +++ b/doc/README-vi.md @@ -117,6 +117,8 @@ Dưới đây là các tùy chọn mà bạn có thể sử dụng: | `fileFilter` | Hàm để xử lý chỉ những file nào mới được chấp nhận | | `limits` | Giới hạn dung lượng file được upload | | `preservePath` | Giữ đầy đủ đường dẫn tới file thay vì chỉ tên file | +| `defParamCharset` | Đối với biểu mẫu nhiều phần, bộ ký tự mặc định | +| | được sử dụng cho tiêu đề (chẳng hạn như tên tệp) | Nói chung với web app, chỉ `dest` mới cần khai báo, như bên dưới: diff --git a/doc/README-zh-cn.md b/doc/README-zh-cn.md index 3db8c099..96bc4afe 100644 --- a/doc/README-zh-cn.md +++ b/doc/README-zh-cn.md @@ -104,6 +104,7 @@ Key | Description `fileFilter` | 文件过滤器,控制哪些文件可以被接受 `limits` | 限制上传的数据 `preservePath` | 保存包含文件名的完整文件路径 +`defParamCharset` | 对于多部分表单,用于标题的默认字符集(例如文件名). **Default**: `'latin1'`. 通常,一般的网页应用,只需要设置 `dest` 属性,像这样: diff --git a/index.js b/index.js index d5b67eba..1dbfaacb 100644 --- a/index.js +++ b/index.js @@ -19,6 +19,7 @@ function Multer (options) { this.limits = options.limits this.preservePath = options.preservePath + this.defParamCharset = options.defParamCharset || 'latin1' this.fileFilter = options.fileFilter || allowAll } @@ -47,6 +48,7 @@ Multer.prototype._makeMiddleware = function (fields, fileStrategy) { return { limits: this.limits, preservePath: this.preservePath, + defParamCharset: this.defParamCharset, storage: this.storage, fileFilter: wrappedFileFilter, fileStrategy: fileStrategy @@ -77,6 +79,7 @@ Multer.prototype.any = function () { return { limits: this.limits, preservePath: this.preservePath, + defParamCharset: this.defParamCharset, storage: this.storage, fileFilter: this.fileFilter, fileStrategy: 'ARRAY' diff --git a/lib/make-middleware.js b/lib/make-middleware.js index b033cbd9..51530ffb 100644 --- a/lib/make-middleware.js +++ b/lib/make-middleware.js @@ -24,13 +24,19 @@ function makeMiddleware (setup) { var fileFilter = options.fileFilter var fileStrategy = options.fileStrategy var preservePath = options.preservePath + var defParamCharset = options.defParamCharset req.body = Object.create(null) var busboy try { - busboy = new Busboy({ headers: req.headers, limits: limits, preservePath: preservePath }) + busboy = new Busboy({ + headers: req.headers, + limits: limits, + preservePath: preservePath, + defParamCharset: defParamCharset + }) } catch (err) { return next(err) }