Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

headers-support-utf8 #1210

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 2 additions & 1 deletion README.md
Expand Up @@ -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)
});
```
Expand Down Expand Up @@ -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.
Expand Down
21 changes: 11 additions & 10 deletions doc/README-ar.md
Expand Up @@ -7,7 +7,7 @@
**ملاحظة**: لن يقوم Multer بمعالجة أي شكل غير متعدد الأجزاء (`multipart/form-data`).


## الترجمات
## الترجمات

هذا الملف متاح أيضًا بلغات أخرى:

Expand Down Expand Up @@ -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`، والتي تحدد مكان تحميل الملفات. في حال حذفت كائن الخيارات ، سيتم الاحتفاظ بالملفات في الذاكرة ولن تتم كتابتها مطلقًا على القرص.

Expand All @@ -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`، وتكوينها كما هو موضح في
المثال التالي :
Expand Down
3 changes: 2 additions & 1 deletion doc/README-es.md
Expand Up @@ -84,7 +84,7 @@ Este es un ejemplo de cómo se utiliza multer en un formulario HTML. Presta espe
<div class="form-group">
<input type="file" class="form-control-file" name="uploaded_file">
<input type="text" class="form-control" placeholder="Number of speakers" name="nspeakers">
<input type="submit" value="Get me the stats!" class="btn btn-default">
<input type="submit" value="Get me the stats!" class="btn btn-default">
</div>
</form>
```
Expand Down Expand Up @@ -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:

Expand Down
7 changes: 4 additions & 3 deletions 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`).
Expand Down Expand Up @@ -87,7 +87,7 @@ Voici un exemple d'utilisation de multer dans un formulaire HTML. Faites particu
<div class="form-group">
<input type="file" class="form-control-file" name="uploaded_file">
<input type="text" class="form-control" placeholder="Number of speakers" name="nspeakers">
<input type="submit" value="Get me the stats!" class="btn btn-default">
<input type="submit" value="Get me the stats!" class="btn btn-default">
</div>
</form>
```
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions doc/README-ko.md
Expand Up @@ -103,6 +103,7 @@ Key | Description
`fileFilter` | 어떤 파일을 허용할지 제어하는 함수
`limits` | 업로드 된 데이터의 한도
`preservePath` | 파일의 base name 대신 보존할 파일의 전체 경로
`defParamCharset` | multipart 양식의 경우 헤더에 사용되는 기본 character set(예: 파일 filename). **Default**: `'latin1'`.

보통의 웹 앱에서는 `dest` 옵션 정도만 필요할지도 모릅니다. 설정 방법은 아래의 예제에 나와있습니다.

Expand Down
5 changes: 3 additions & 2 deletions doc/README-pt-br.md
Expand Up @@ -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:

Expand Down Expand Up @@ -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:

Expand Down Expand Up @@ -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:

Expand Down
17 changes: 9 additions & 8 deletions doc/README-ru.md
Expand Up @@ -4,7 +4,7 @@ Multer — это middleware для фреймворка express для обра

**ВАЖНО**: Multer не обрабатывает никакой другой тип форм, кроме `multipart/form-data`.

## Переводы
## Переводы

Это README также доступно на других языках:

Expand Down Expand Up @@ -109,6 +109,7 @@ Multer принимает объект с опциями. Базовая опц
`fileFilter` | Функция для контроля принятия файлов
`limits` | Ограничения по загрузке
`preservePath` | Сохранять полный путь к файлам вместо только базового имени
`defParamCharset` | Для multipart форм дефолтный character set, использующийся для headers (таких, как filename). **Default**: `'latin1'`.

Обычно для веб-приложения нужно обязательно переопределить `dest`, как показано в примере ниже.

Expand Down Expand Up @@ -153,7 +154,7 @@ const upload = multer({ dest: 'uploads/' })

#### `DiskStorage`

Движок дискового пространства. Дает полный контроль над размещением файлов на диск.
Движок дискового пространства. Дает полный контроль над размещением файлов на диск.

```javascript
const storage = multer.diskStorage({
Expand All @@ -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 не добавляет никакого файлового расширения, ваша функция должна возвращать имя файла с необходимым расширением.
Expand All @@ -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).

Доступны следующие целочисленные значения:
Expand All @@ -216,7 +217,7 @@ const upload = multer({ storage: storage })

### `fileFilter`

Задают функцию для того, чтобы решать, какие файлы будут загружены, а какие — нет. Функция может выглядеть так:
Задают функцию для того, чтобы решать, какие файлы будут загружены, а какие — нет. Функция может выглядеть так:

```javascript
function fileFilter (req, file, cb) {
Expand Down
2 changes: 2 additions & 0 deletions doc/README-vi.md
Expand Up @@ -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:

Expand Down
1 change: 1 addition & 0 deletions doc/README-zh-cn.md
Expand Up @@ -104,6 +104,7 @@ Key | Description
`fileFilter` | 文件过滤器,控制哪些文件可以被接受
`limits` | 限制上传的数据
`preservePath` | 保存包含文件名的完整文件路径
`defParamCharset` | 对于多部分表单,用于标题的默认字符集(例如文件名). **Default**: `'latin1'`.

通常,一般的网页应用,只需要设置 `dest` 属性,像这样:

Expand Down
3 changes: 3 additions & 0 deletions index.js
Expand Up @@ -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
}

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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'
Expand Down
8 changes: 7 additions & 1 deletion lib/make-middleware.js
Expand Up @@ -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)
}
Expand Down