Skip to content

Commit aa42bea

Browse files
authored
Merge pull request #1232 from eugene0928/master
doc: uzbek language
2 parents 2579455 + be3d4de commit aa42bea

File tree

2 files changed

+274
-0
lines changed

2 files changed

+274
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ This README is also available in other languages:
1717
- [Việt Nam](https://github.com/expressjs/multer/blob/master/doc/README-vi.md) (Vietnam)
1818
- [Português](https://github.com/expressjs/multer/blob/master/doc/README-pt-br.md) (Portuguese Brazil)
1919
- [Français](https://github.com/expressjs/multer/blob/master/doc/README-fr.md) (French)
20+
- [O'zbek tili](https://github.com/expressjs/multer/blob/master/doc/README-uz.md) (Uzbek)
2021

2122
## Installation
2223

doc/README-uz.md

+273
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,273 @@
1+
# 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)
2+
3+
Multer - bu nodejs middleware bo'lib, asosan `multipart/form-data` shaklda yuborilgan fayllarni yuklashda ishlatiladi. Yuqori samaradorlikka erishish uchun [busboy](https://github.com/mscdex/busboy)ning ustiga yozilgan.
4+
5+
**Muhim**: Multer `multipart` bo'lmagan har qanday formani qayta ishlamaydi.
6+
7+
## Tarjimalar
8+
9+
Bu README boshqa tillarda ham mavjud:
10+
11+
- [العربية](https://github.com/expressjs/multer/blob/master/doc/README-ar.md) (arabcha)
12+
- [English](https://github.com/expressjs/multer/blob/master/README.md) (inglizcha)
13+
- [Español](https://github.com/expressjs/multer/blob/master/doc/README-es.md) (ispancha)
14+
- [简体中文](https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md) (xitoycha)
15+
- [한국어](https://github.com/expressjs/multer/blob/master/doc/README-ko.md) (korescha)
16+
- [Português](https://github.com/expressjs/multer/blob/master/doc/README-pt-br.md) (portugalcha)
17+
- [Русский язык](https://github.com/expressjs/multer/blob/master/doc/README-ru.md) (ruscha)
18+
- [Français](https://github.com/expressjs/multer/blob/master/doc/README-fr.md) (fransuzcha)
19+
20+
21+
## O'rnatish
22+
23+
```sh
24+
$ npm install --save multer
25+
```
26+
27+
## Foydalanish
28+
29+
Multer - `request` ob'ektiga `body` va `file` yoki `files` ob'ektini qo'shadi. `body` ob'ekti formaning matn maydonlarining (fields) qiymatlarini o'z ichiga oladi, `file` yoki `files` ob'ekti forma orqali yuklangan fayllarni o'z ichiga oladi.
30+
31+
Sodda ishlatish uchun namuna:
32+
33+
Formada `enctype="multipart/form-data"` qo'shish esdan chiqmasin
34+
35+
```html
36+
<form action="/profile" method="post" enctype="multipart/form-data">
37+
<input type="file" name="avatar" />
38+
</form>
39+
```
40+
41+
```javascript
42+
const express = require('express')
43+
const multer = require('multer')
44+
const upload = multer({ dest: 'uploads/' })
45+
46+
const app = express()
47+
48+
app.post('/profile', upload.single('avatar'), function (req, res, next) {
49+
// req.file - fayl `avatar`
50+
// req.body agar matnli maydonlar (fields) bo'lsa, ularni saqlanadi
51+
})
52+
53+
app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) {
54+
// req.files - fayllar massivi `photos`
55+
// req.body agar matnli maydonlar (fields) bo'lsa, ularni saqlanadi
56+
})
57+
58+
const cpUpload = upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }])
59+
app.post('/cool-profile', cpUpload, function (req, res, next) {
60+
// req.files - bu ob'ekt (String -> Array), matn maydoni(fieldname) - bu key, va qiymat - fayllar massivi
61+
//
62+
// misol:
63+
// req.files['avatar'][0] -> File
64+
// req.files['gallery'] -> Array
65+
//
66+
// req.body agar matnli maydonlar (fields) bo'lsa, ularni saqlanadi
67+
})
68+
```
69+
70+
Agarda siz faqat matndan iborat multipart form bilan ishlashingiz kerak bo'lsa, `.none()` ishlating:
71+
72+
```javascript
73+
const express = require('express')
74+
const app = express()
75+
const multer = require('multer')
76+
const upload = multer()
77+
78+
app.post('/profile', upload.none(), function (req, res, next) {
79+
// req.body matnli maydonlar (fields)ni o'zida saqlaydi
80+
})
81+
```
82+
83+
## API
84+
85+
### Fayl haqida ma'lumot
86+
87+
Har bir fayl quyidagi ma'lumotlarni o'zida saqlaydi:
88+
89+
Kalit(key) | Ta'rif | Eslatma
90+
--- |----------------------------------------| ---
91+
`fieldname` | Formada berilgan maxsus nom |
92+
`originalname` | Foydalanuvchi kompyuteridagi fayl nomi |
93+
`encoding` | Faylning kodlash turi |
94+
`mimetype` | Faylning `mime` turi |
95+
`size` | Fayl hajmi - baytda |
96+
`destination` | Fayl saqlangan papka | `DiskStorage`
97+
`filename` | `destination`ni ichidagi fayl nomi | `DiskStorage`
98+
`path` | Yuklangan faylning to'liq yo'li | `DiskStorage`
99+
`buffer` | Butun boshli fayl `Buffer` tipda | `MemoryStorage`
100+
101+
### `multer(opts)`
102+
103+
Multer qo'shimcha ob'ekt qabul qiladi, ulardan eng asosiysi - `dest`,
104+
Multerga fayllarni qayerga yuklash kerakligini aytadigan xususiyat. Agarda siz qo'shimcha(`options`) ob'ektni tashlab ketsangiz, fayllar xotirada saqlanadi va hech qachon diskka yozilmaydi.
105+
106+
Standart holatda - Multer nomlashda kelib chiqishi mumkin bo'lgan muammolarni oldini olish uchun fayllar nomini o'zgartiradi. O'z talablaringizga mos ravishda nomlash funksiyasini sozlay olashingiz mumkin.
107+
108+
Quyidagilar Multerga qo'shimcha qiymat sifati berilishi mumkin:
109+
110+
Kalit(key) | Ta'rif
111+
--- | ---
112+
`dest` yoki `storage` | Faylni qayerda saqlash
113+
`fileFilter` | Qaysi fayllar qabul qilinishini boshqarish funksiyasi
114+
`limits` | Yuklash chegarasi
115+
`preservePath` | Asosiy nom o'rniga fayllarning to'liq yo'lini saqlash
116+
117+
O'rtacha veb-ilovada faqat `dest` kerak bo'lishi mumkin va quyidagicha sozlanishi mumkin
118+
119+
```javascript
120+
const upload = multer({ dest: 'uploads/' })
121+
```
122+
Yuklamalaringizni boshqarishda ko'proq nazoratni xohlasangiz, `dest` o'rniga `storage` tanlovini ishlatishingiz kerak. Multer `DiskStorage` va `MemoryStorage` saqlash motorlari(engines) bilan keladi. Boshqa motorlar(engines) uchun uchinchi tomondan(third parties) ko'proq tanlovlar keladi.
123+
124+
#### `.single(fieldname)`
125+
126+
`fieldname` nomi bilan yagona faylni qabul qiladi. Yagona fayl `req.file` da saqlanadi.
127+
128+
#### `.array(fieldname[, maxCount])`
129+
130+
`fieldname` nomi bilan fayllar massivini qabul qiladi. Agar `maxCount` dan ko'p fayl yuklash urinishi bo'lsa, hatolikni aniqlash imkoniyatini berish mumkin. Fayllar massivi `req.files` da saqlanadi.
131+
132+
#### `.fields(fields)`
133+
134+
`fields`da aniqlangan fayllarni qabul qiladi. Fayllar massivini saqlash uchun `req.files` ichidagi massivda saqlanadi.
135+
136+
`fields` ob'ektida `name` va `maxCount` kalitlar(keys)ni o'z ichiga olishi kerak. Misol:
137+
138+
```javascript
139+
[
140+
{ name: 'avatar', maxCount: 1 },
141+
{ name: 'gallery', maxCount: 8 }
142+
]
143+
```
144+
145+
#### `.none()`
146+
147+
Faqatgina matnli maydonlar(fields)ni oladi. Agarda biror fayl yuklansa, "LIMIT\_UNEXPECTED\_FILE" xatoligi yuboriladi.
148+
149+
#### `.any()`
150+
151+
Ushbu so'rov barcha fayllarni qabul qiladi, fayllar `req.files` ichida saqlanadi.
152+
153+
**OGOHLANTIRISH:** Foydalanuvchi yuklagan fayllarni doimo boshqarib turishni unutmang. Ularni boshqa yo'l(route)ni kutmagan holda fayllarini yuklash imkonini beradigan global middleware sifatida multerni sozlamang. Faqatgina yuklangan fayllarni boshqarish kerak bo'lgan yo'l(route)larda ushbu funksiyani ishlating.
154+
155+
### `storage`
156+
157+
#### `DiskStorage`
158+
159+
Diskka saqlash motori(engine) sizga fayllarni saqlashda to'liq nazorat qilish imkonini beradi.
160+
161+
```javascript
162+
const storage = multer.diskStorage({
163+
destination: function (req, file, cb) {
164+
cb(null, '/tmp/my-uploads')
165+
},
166+
filename: function (req, file, cb) {
167+
cb(null, file.fieldname + '-' + Date.now())
168+
}
169+
})
170+
171+
const upload = multer({ storage: storage })
172+
```
173+
174+
`destination` va `filename` qo'shimcha tanlovlari mavjud, ular ikkala ham qaysi papkada faylni saqlash kerakligini aniqlab turadigan funksiyalardir.
175+
176+
`destination` yuklangan fayllarni qaysi papkada saqlash kerakligini aniqlab turadi. Bu, `string` sifatida berilishi mumkin (masalan, `'/tmp/uploads'`). Agar `destination` berilmagan bo'lsa, operatsion tizimning vaqtinchalik fayllar uchun ishlatiladigan papkasini ishlatadi.
177+
178+
**Diqqat:** `destination` ni funksiya sifatida berib bo'lganda papka ochilganligiga o'zingiz javobgar bo'lasiz. Agar `string` sifatida bersangiz, multer papkani o'zi uchun yaratishni ta'minlaydi.
179+
180+
`filename` faylni papka ichida qanday nomlanganligini aniqlaydi. Agar `filename` berilmagan bo'lsa, har bir faylga fayl kengaytmasini o'z ichiga olmagan tasodifiy nom beriladi.
181+
182+
**Diqqat:** Multer siz uchun fayl kengaytmasini qo'shmaydi, sizning funksiyangiz kengaytma bilan to'liq nomni qaytarishi kerak.
183+
184+
Har bir funksiya `req` so'rovini va fayl haqida ma'lumotlarni (`file`) olish uchun o'tkaziladi.
185+
186+
Diqqat qiling, `req.body` hali to'liq to'ldirilmagan bo'lishi mumkin. Bu mijozning maydon(field)larni va fayllarni serverga qanday yuborishiga bog'liq bo'ladi.
187+
188+
Callback funktsiyasida ishlatiladigan chaqirish tartibini tushunish uchun (birinchi parametr sifatida null o‘tkazish talab etilishi) ko‘rish uchun quyidagi manzilga murojaat qiling:
189+
[Node.js da xatoliklarni ushlash](https://web.archive.org/web/20220417042018/https://www.joyent.com/node-js/production/design/errors)
190+
191+
#### `MemoryStorage`
192+
193+
Xotira saqlash motori fayllarni xotirada `Buffer` ob'ektlar sifatida saqlaydi. Uning qo'shimcha qiymatlari yo‘q.
194+
195+
```javascript
196+
const storage = multer.memoryStorage()
197+
const upload = multer({ storage: storage })
198+
```
199+
Xotirada saqlash paytida, fayl ma'lumotlari `buffer` deb nomlanadigan maydonni o‘z ichiga oladi.
200+
201+
**DIQQAT:** Juda katta fayllarni yuklash, yoki kichik fayllarni tez-tez yuklash, xotirada saqlash ishlatilganda, sizning ilovangizning xotirasini to'ldirib qo'yishi mumkin.
202+
203+
### `limits`
204+
205+
Quyidagi xususiyatlar o'lchov(limit)larni aniqlaydigan obyekt. Multer ushbu obyektni to'g'ridan-to'g'ri busboy ga o'tkazadi va xususiyatlar tafsilotlari [busboy sahifasida](https://github.com/mscdex/busboy#busboy-methods)dan topishingiz mumkin.
206+
207+
Quyidagi butun qiymatlar mavjud:
208+
209+
Kalit(key) | Ta'rif | Odatiy qiymat
210+
--- |---------------------------------------------------------------------------------------------| ---
211+
`fieldNameSize` | Maksimal maydon nomi o'lchami | 100 bayt
212+
`fieldSize` | Maksimal maydon qiymati o'lchami (baytlarda) | 1MB
213+
`fields` | Fayl bo'lmagan maydonlarning maksimal soni | Cheklanmagan
214+
`fileSize` | Multipart form uchun faylning maksimal o'lchami (baytda) | Cheklanmagan
215+
`files` | Multipart form uchun fayllar sonining maksimal chegarasi | Cheklanmagan
216+
`parts` | Multipart form uchun fayllar sonining maksimal chegarasi (fieldlar va fayllar) | Cheklanmagan
217+
`headerPairs` | Multipart form uchun ma'lumotlar (kalit va qiymat juftliklari) sonining maksimal chegarasi | 2000
218+
219+
Chegaralarni sozlash, DoS-hujumlariga qarshi saytingizni himoya qilishga yordam bera olishi mumkin
220+
221+
### `fileFilter`
222+
223+
Bu, qaysi fayllarni yuklashi, qaysilarini o'tkazib yuborish kerakligini boshqarish uchun funksiya sifatida sozlasa bo'ladi. Funksiya quyidagi ko'rinishda bo'lishi kerak:"
224+
225+
```javascript
226+
function fileFilter (req, file, cb) {
227+
228+
// Bu funksiya, faylni qabul qilish kerakligini anglatish uchun `cb` ni
229+
// boolean qiymat bilan chaqirish kerak.
230+
231+
// Faylni qabul qilishni rad etish uchun false quyudagicha berilishi kerak:
232+
cb(null, false)
233+
234+
// Faylni qabul qiilishni tasdiqlash uchun true quyudagicha berilishi kerak:
235+
cb(null, true)
236+
237+
// Nimadir xato ketsa, siz har doim Error berishingiz mumkin:
238+
cb(new Error('I don\'t have a clue!'))
239+
240+
}
241+
```
242+
243+
## Xatolar bilan ishlash
244+
245+
Xatoga duch kelganda, Multer xatoni Expressga yuboradi. [standart express usuli](http://expressjs.com/guide/error-handling.html)dan foydalanib xatoni tartibliroq chiqarishingiz mumkin.
246+
247+
Agar siz Multerdan chiqqan xatolarni aniqlamoqchi bo'lsangiz o'zingiz `middleware` funksiya yozishingiz mumkin. Shuningdek, agar siz faqat [Multer xatolarini](https://github.com/expressjs/multer/blob/master/lib/multer-error.js) ushlamoqchi bo'lsangiz, siz `multer` ob'ektiga yozilgan `MulterError` class ni ishlatishingiz mumkin (masalan, `err instanceof multer.MulterError`).
248+
249+
250+
```javascript
251+
const multer = require('multer')
252+
const upload = multer().single('avatar')
253+
254+
app.post('/profile', function (req, res) {
255+
upload(req, res, function (err) {
256+
if (err instanceof multer.MulterError) {
257+
// Yuklanishda Multerdan xatolik yuz berganda.
258+
} else {
259+
// Yuklanishda noma'lum xatolik yuz berganda.
260+
}
261+
262+
// Hammasi muvaffaqqiyatli bo'lganda.
263+
})
264+
})
265+
```
266+
267+
## Maxsus saqlash mexanizmi
268+
269+
O'zingizning saqlash dvigatelingizni qanday yaratish haqida ma'lumot olish: [Maxsus saqlash mexanizmi](https://github.com/expressjs/multer/blob/master/StorageEngine.md).
270+
271+
## Litsenziya
272+
273+
[MIT](LICENSE)

0 commit comments

Comments
 (0)