diff --git a/README.md b/README.md index 7f5d0807..00c42744 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ on top of [busboy](https://github.com/mscdex/busboy) for maximum efficiency. This README is also available in other languages: +- [العربية](https://github.com/expressjs/multer/blob/master/doc/README-ar.md) (Arabic) - [Español](https://github.com/expressjs/multer/blob/master/doc/README-es.md) (Spanish) - [简体中文](https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md) (Chinese) - [한국어](https://github.com/expressjs/multer/blob/master/doc/README-ko.md) (Korean) diff --git a/doc/README-ar.md b/doc/README-ar.md new file mode 100644 index 00000000..5497865f --- /dev/null +++ b/doc/README-ar.md @@ -0,0 +1,311 @@ +# 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 وسيط node.js لمعالجة `multipart/form-data`, والتي تُستخدم أساسًا لتحميل الملفات. تم بناء هذا الوسيط بالإعتماد على [busboy](https://github.com/mscdex/busboy) لأجل الحصول على أقصى قدر من الكفاءة. + +**ملاحظة**: لن يقوم Multer بمعالجة أي شكل غير متعدد الأجزاء (`multipart/form-data`). + + +## الترجمات + +هذا الملف متاح أيضًا بلغات أخرى: + +- [English](https://github.com/expressjs/multer/blob/master/README.md) (الإنجليزية) +- [Español](https://github.com/expressjs/multer/blob/master/doc/README-es.md) (الإسبانية) +- [简体中文](https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md) (الصينية) +- [한국어](https://github.com/expressjs/multer/blob/master/doc/README-ko.md) (الكورية) +- [Русский язык](https://github.com/expressjs/multer/blob/master/doc/README-ru.md) (الروسية) +- [Việt Nam](https://github.com/expressjs/multer/blob/master/doc/README-vi.md) (الفتنامية) +- [Português](https://github.com/expressjs/multer/blob/master/doc/README-pt-br.md) (البرتغالية) + + +## التنصيب + +
+ +```sh +$ npm install --save multer +``` + +
+ +## الاستعمال + +يضيف Multer كائن `body` وكائن `file` أو `files` إلى كائن `request`. يحتوي الكائن `body` على قيم مدخلات النص في الإستمارة ، بينما يحتوي الكائن `file` أو `files` على الملفات التي تم تحميلها عبر الإستمارة. + +مثال على الاستخدام الأساسي: + +لا تنسَ `enctype="multipart/form-data"` في الإستمارة الخاص بك. + +
+ +```html +
+ +
+``` + +```javascript +var express = require('express') +var multer = require('multer') +var upload = multer({ dest: 'uploads/' }) + +var app = express() + +app.post('/profile', upload.single('avatar'), function (req, res, next) { + // req.file is the `avatar` file + // req.body will hold the text fields, if there were any +}) + +app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) { + // req.files is array of `photos` files + // req.body will contain the text fields, if there were any +}) + +var cpUpload = upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }]) +app.post('/cool-profile', cpUpload, function (req, res, next) { + // req.files is an object (String -> Array) where fieldname is the key, and the value is array of files + // + // e.g. + // req.files['avatar'][0] -> File + // req.files['gallery'] -> Array + // + // req.body will contain the text fields, if there were any +}) +``` + +
+ +إذا احتجت لمعالجة إستمارة متعددة الأجزاء للنص فقط ، فيجب عليك استخدام الدالة `.none ()`: + +
+ +```javascript +var express = require('express') +var app = express() +var multer = require('multer') +var upload = multer() + +app.post('/profile', upload.none(), function (req, res, next) { + // req.body contains the text fields +}) +``` +
+ +## واجهة برمجة التطبيقات (API) + +### معلومات الملف + +كل ملف يحتوي على المعلومات التالية: + +مفتاح | وصف | ملاحظة +--- | --- | --- +`fieldname` | اسم المُدخَل المحدد في الإستمارة | +`originalname` | اسم الملف على كمبيوتر المستخدم | +`encoding` | نوع تشفير الملف | +`mimetype` | نوع ملف ملحقات بريد إنترنت متعددة الأغراض ( MIME ) | +`size` | حجم الملف بالبايت | +`destination` | المجلد الذي تم حفظ الملف إليه | `تخزين على الاسطوانة` (`DiskStorage`) +`filename` | اسم الملف داخل "الوجهة" ( `destination` ) | `تخزين على الاسطوانة` (`DiskStorage`) +`path` | المسار الكامل للملف الذي تم تحميله | `تخزين على الاسطوانة` (`DiskStorage`) +`buffer` | "ذاكرة" (`Buffer`) للملف بأكمله | `تخزين على الذاكرة ` (`MemoryStorage`) + + +### `multer(opts)` + +يقبل Multer كائن الخيارات ، وأهمها خاصية `dest`، والتي تحدد مكان تحميل الملفات. في حال حذفت كائن الخيارات ، سيتم الاحتفاظ بالملفات في الذاكرة ولن تتم كتابتها مطلقًا على القرص. + +بشكل افتراضي ، سيقوم Multer بإعادة تسمية الملفات لتجنب تعارض الأسماء. يمكن تخصيص وظيفة إعادة التسمية وفقا لاحتياجاتك. + +فيما يلي الخيارات التي يمكن تمريرها إلى Multer: + +مفتاح | وصف +--- | --- +`dest` أو `storage` | مكان لتخزين الملفات +`fileFilter` | دالة للسيطرة على الملفات التي يتم قبولها +`limits` | حدود البيانات التي تم تحميلها +`preservePath` | الاحتفظ بالمسار الكامل للملفات بدلاً من الاسم الأساسي + +في تطبيق ويب متوسط ​​، قد تكون هناك حاجة فقط إلى `dest`، وتكوينها كما هو موضح في +المثال التالي : + +
+ +```javascript +var upload = multer({ dest: 'uploads/' }) +``` + +
+ +إذا كنت تريد مزيدًا من التحكم في عمليات التحميل ، فستحتاج إلى استخدام خيار `storage` بدلاً من `dest`. يأتي Multer مع محركات التخزين `DiskStorage` و` MemoryStorage` ؛ كما تتوفر المزيد من المحركات من أطراف ثالثة. + +#### `.single(fieldname)` + +قبول ملف واحد باسم `اسم-المُدخَل`. سيتم تخزين الملف في `req.file`. + +#### `.array(fieldname[, maxCount])` + +قبول مصفوفة من الملفات ، وكلها تحمل اسم `اسم-المُدخَل`. يظهر خطأ اختياريً إذا تم تحميل ملفات أكثر من `maxCount`. سيتم تخزين مصفوفة الملفات في `req.files`. + +#### `.fields(fields)` + +قبول مزيج من الملفات ، المحدد بواسطة `المدخلات`. سيتم تخزين كائن مع مصفوفات من الملفات في `req.files`. + +يجب أن تكون `المدخلات` عبارة عن مصفوفة من الكائنات التي توفر بشكل اساسي `name` واختيارياً `maxCount`. +مثال: + +
+ +```javascript +[ + { name: 'avatar', maxCount: 1 }, + { name: 'gallery', maxCount: 8 } +] +``` + +
+ +#### `.none()` + +قبول المدخلات النصية فقط. في حالة رفع أي ملف ، سيتم إصدار خطأ بشيفرة "LIMIT \_UNEXPECTED \_FILE". + +#### `.any()` + +قبول جميع الملفات التي تأتي عبر السلك. سيتم تخزين مصفوفة من الملفات في `req.files`. + +**تحذير:** تأكد من أنك تعالج دائمًا الملفات التي يقوم المستخدم بتحميلها. لا تقم أبداً بإضافة multer باعتبارها أداة وسيطة عامة ، حيث يمكن للمستخدم الضار تحميل الملفات إلى مسار غير متتوقع. استخدم هذه الدالة فقط على المسارات التي تتعامل فيها مع الملفات التي تم تحميلها. + +### `storage` + +#### `DiskStorage` + +يمنحك محرك تخزين القرص التحكم الكامل في تخزين الملفات على القرص. + +
+ +```javascript +var storage = multer.diskStorage({ + destination: function (req, file, cb) { + cb(null, '/tmp/my-uploads') + }, + filename: function (req, file, cb) { + cb(null, file.fieldname + '-' + Date.now()) + } +}) + +var upload = multer({ storage: storage }) +``` + +
+ +هناك خياران متاحان ، `destination` و `filename`. كلاهما يعملان على تحديد مكان تخزين الملف. + +يتم استخدام `destination` لتحديد أي مجلد يجب تخزين الملفات المحملة. يمكن أيضًا إعطاء هذا كـ`سلسلة` (مثل `'/tmp/uploads'`). إذا لم يتم إعطاء `destination` ، فسيتم استخدام الدليل الافتراضي لنظام التشغيل للملفات المؤقتة. + +**ملاحظة:** أنت مسؤول عن إنشاء الدليل عند توفر `destination` كدالة. عند المرور بسلسلة ، سوف يتأكد multer من إنشاء الدليل من أجلك. + +يتم استخدام `اسم الملف` لتحديد ما يجب تسمية الملف داخل المجلد. إذا لم يتم تقديم `اسم الملف`، فسيتم إعطاء كل ملف اسمًا عشوائيًا لا يتضمن أي امتداد للملف. + +**ملاحظة:** لن يقوم multer بإلحاق اي ملحق ملف لك، الدالة الخاص بك يجب أن تقوم بإرجاع اسم ملف كامل بملحق الملف. + +يتم تمرير كل دالة من خلال الطلب (req`) وبعض المعلومات حول الملف (`file`) للمساعدة في اتخاذ القرار. + +لاحظ أن `req.body` ربما لم يتم ملؤها بالكامل بعد. يعتمد ذلك على الترتيب الذي يقوم به العميل من خلال نقل المدخلات والملفات إلى الخادم. + +#### `MemoryStorage` + +يخزن محرك تخزين الذاكرة الملفات الموجودة في الذاكرة ككائنات `ذاكرة` (`Buffer`). ليس لديها أي خيارات. + +
+ +```javascript +var storage = multer.memoryStorage() +var upload = multer({ storage: storage }) +``` + +
+ +عند استخدام ذاكرة التخزين ، ستحتوي معلومات الملف على مُدخَل يسمى `buffer` الذي يحتوي على الملف بأكمله. + +**تحذير**: يمكن أن يؤدي تحميل ملفات كبيرة جدًا أو ملفات صغيرة نسبيًا بأعداد كبيرة و بسرعة كبيرة إلى نفاد ذاكرة التطبيق عند استخدام ذاكرة التخزين. + +### `limits` + +كائن يحدد حدود حجم الخصائص الاختيارية التالية. يقوم Multer بتمرير هذا الكائن إلى busboy مباشرة ، ويمكن العثور على تفاصيل الخصائص من خلال [صفحة busboy's](https://github.com/mscdex/busboy#busboy-methods). + +تتوفر القيم الصحيحة التالية: + +مفتاح | وصف | افتراضي +--- | --- | --- +`fieldNameSize` | الحد الأقصى لحجم اسم المُدخَل | 100 بايت +`fieldSize` | الحد الأقصى لحجم قيمة المُدخَل (بالبايت) | 1 ميغابايت +`fields` | الحد الأقصى لعدد المدخلات التى لا تعتبر من الملفات | ما لا نهاية +`fileSize` | حجم الملف الأقصى بالنسبة لإستمارة متعددة الأجزاء (بالبايت) | ما لا نهاية +`files` | الحد الأقصى لعدد المدخلات من نوع الملفات بالنسبة لإستمارة متعددة الأجزاء | ما لا نهاية +`parts` | الحد الأقصى لعدد الأجزاء (مدخلات + ملفات) بالنسبة لإستمارة متعددة الأجزاء | ما لا نهاية +`headerPairs` | الحد الأقصى لعدد أزواج الرأس (المفتاح => القيمة) المطلوب تحليلها بالنسبة لإستمارة متعددة الأجزاء | 2000 + +يمكن أن يساعد تحديد الحدود في حماية موقعك من هجمات حجب الخدمة (DoS). + +### `fileFilter` + +اضبط هذا على دالة للتحكم في الملفات التي ينبغي تحميلها وأي الملفات يجب تخطيها. يجب أن تبدو دالة كما يلي: + +
+ +```javascript +function fileFilter (req, file, cb) { + + // The function should call `cb` with a boolean + // to indicate if the file should be accepted + + // To reject this file pass `false`, like so: + cb(null, false) + + // To accept the file pass `true`, like so: + cb(null, true) + + // You can always pass an error if something goes wrong: + cb(new Error('I don\'t have a clue!')) + +} +``` + +
+ +## معالجة الأخطاء + +عند مواجهة خطأ ، سيقوم Multer بتفويض الخطأ إلى Express. يمكنك +عرض صفحة خطأ لطيفة باستخدام [طريقة Express القياسية](http://expressjs.com/guide/error-handling.html). + +إذا كنت تريد إنتقاء الأخطاء والحصول على [أخطاء Multer فقط](https://github.com/expressjs/multer/blob/master/lib/multer-error.js)، فيمكنك نداء بدالة الوسيطة من قبل نفسك. أيضًا ، إذا كنت تريد التقاط أخطاء Multer فقط ، فيمكنك استخدام صنف `MulterError` المتصل بالكائن` multer` نفسه (على سبيل المثال `err instanceof multer.MulterError`). + +
+ +```javascript +var multer = require('multer') +var upload = multer().single('avatar') + +app.post('/profile', function (req, res) { + upload(req, res, function (err) { + if (err instanceof multer.MulterError) { + // A Multer error occurred when uploading. + } else if (err) { + // An unknown error occurred when uploading. + } + + // Everything went fine. + }) +}) +``` + +
+ +## محرك التخزين الخاص بك + +للحصول على معلومات حول كيفية إنشاء محرك التخزين الخاص بك ، راجع [محرك تخزين Multer](https://github.com/expressjs/multer/blob/master/StorageEngine.md). + +## الترخيص + +[MIT](LICENSE) diff --git a/doc/README-ko.md b/doc/README-ko.md index a58897fa..897ba529 100644 --- a/doc/README-ko.md +++ b/doc/README-ko.md @@ -7,6 +7,9 @@ Multer는 파일 업로드를 위해 사용되는 `multipart/form-data` 를 다 ## 번역 이 문서는 아래의 언어로도 제공됩니다: + +- [العربية](https://github.com/expressjs/multer/blob/master/doc/README-ar.md) (아라비아 말) +- [English](https://github.com/expressjs/multer/blob/master/README.md) - [English](https://github.com/expressjs/multer/blob/master/README.md) (영어) - [Español](https://github.com/expressjs/multer/blob/master/doc/README-es.md) (스페인어) - [简体中文](https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md) (중국어) diff --git a/doc/README-ru.md b/doc/README-ru.md index 5c87faba..23615c27 100644 --- a/doc/README-ru.md +++ b/doc/README-ru.md @@ -8,6 +8,7 @@ Multer — это middleware для фреймворка express для обра Это README также доступно на других языках: +- [العربية](https://github.com/expressjs/multer/blob/master/doc/README-ar.md) (арабский) - [English](https://github.com/expressjs/multer/blob/master/README.md) (Английский) - [Español](https://github.com/expressjs/multer/blob/master/doc/README-es.md) (Испанский) - [简体中文](https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md) (Китайский) diff --git a/doc/README-zh-cn.md b/doc/README-zh-cn.md index 74bd12d1..3db8c099 100644 --- a/doc/README-zh-cn.md +++ b/doc/README-zh-cn.md @@ -10,6 +10,7 @@ Multer 是一个 node.js 中间件,用于处理 `multipart/form-data` 类型 ## 其它语言 +- [العربية](https://github.com/expressjs/multer/blob/master/doc/README-ar.md) (阿拉伯语) - [English](https://github.com/expressjs/multer/blob/master/README.md) (英语) - [Español](https://github.com/expressjs/multer/blob/master/doc/README-es.md) (西班牙文) - [한국어](https://github.com/expressjs/multer/blob/master/doc/README-ko.md) (朝鲜语)