Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ composer ΠΏΠ°ΠΊΠ΅Ρ
ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, (*1)
php composer.phar require snewer/yii2-storage
ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ, (*2)
"snewer/yii2-storage": "*"
Π² composer.json ΡΠ°ΠΉΠ» ΠΏΡΠΎΠ΅ΠΊΡΠ°., (*3)
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ°
ΠΠ°Π΄Π°ΡΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° β ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡ ΠΈ ΠΈΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅., (*4)
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ buckets
, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ
Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡ., (*5)
ΠΠ°ΠΆΠ½ΠΎ! ΠΠ»ΡΡΠ°ΠΌΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠ²Π»ΡΡΡΡΡ Π½Π°Π·Π²Π°Π½ΠΈΡ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ
Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°., (*6)
ΠΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π² ΠΏΡΠΎΠ΅ΠΊΡ:, (*7)
[
// ...
'components' => [
//...
'storage' => [
'class' => 'snewer\storage\StorageManager',
'buckets' => []
],
//...
],
// ...
]
\
ΠΠΎΠ΄ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° snewer\storage\AbstractBucket
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ:, (*8)
- Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΠ°ΠΉΠ»
- ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π°
- ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ°ΠΉΠ»
- ΠΏΠΎΠ»ΡΡΠΈΡΡ web ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠ°ΠΉΠ»
ΠΈΠ· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΡΠΈΡΡΠ΅ΠΌΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ)
ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Amazon AWS)., (*9)
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ
ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡΡΡ ΠΎΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, (*10)
snewer\storage\AbstractBucket
\
"ΠΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ" Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π΄ΡΠ°ΠΉΠ²Π΅Ρ Π΄Π»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, (*11)
snewer\storage\drivers\FileSystemDriver
ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°:, (*12)
Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ |
Π’ΠΈΠΏ |
ΠΠ±ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ |
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ |
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
basePath |
string |
ΠΠ° |
ΠΠ΅Ρ |
ΠΠ°ΠΏΠΊΠ° Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΠΊΡΠ΄Π° Π±ΡΠ΄ΡΡ Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ ΡΠ°ΠΉΠ»Ρ. |
baseUrl |
stringΒ |Β array |
ΠΠ΅Ρ |
ΠΠ΅Ρ |
Url Π΄ΠΎ ΠΏΠ°ΠΏΠΊΠΈ Π·Π°Π³ΡΡΠ·ΠΎΠΊ. ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΠΏΡΡΠ΅ΠΉ.
Π’ΠΎΠ³Π΄Π° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎ ΠΈ ΠΎΠ΄Π½ΠΎΠ·Π°ΡΠ½ΠΎ Π²ΡΠ±ΡΠ°Π½
ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡΡΠ΅ΠΉ. *
|
depth |
int |
ΠΠ΅Ρ |
3 |
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΎΠΊ, ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠΎΠ΅ Π² Π·Π°Π³ΡΡΠ·ΠΎΡΠ½ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ. |
* ΠΡΠ°ΡΠ·Π΅ΡΡ ΠΈΠΌΠ΅ΡΡ Π»ΠΈΠΌΠΈΡ Π½Π° ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ.
ΠΠ»Ρ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈΡ Π»ΠΈΠΌΠΈΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π΄ΠΎΠΌΠ΅Π½Ρ,
ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠ΅ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³., (*13)
\
ΠΡΠΈΠΌΠ΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡ:, (*14)
[
// ...
'components' => [
//...
'storage' => [
'class' => 'snewer\storage\StorageManager',
'buckets' => [
'images' => [
'class' => 'snewer\storage\drivers\FileSystemDriver',
'basePath' => '@frontend/web/uploads/images/',
'baseUrl' => '@web/uploads/images/',
'depth' => 4
],
'documents' => [
'class' => 'snewer\storage\drivers\FileSystemDriver',
'basePath' => '@frontend/web/uploads/documents/',
'baseUrl' => '@web/uploads/documents/',
'depth' => 4
],
// ...
]
],
//...
],
// ...
]
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠΎΡΠ»Π΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅
ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, ΡΠ°ΠΊ ΠΈ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡ
Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°., (*15)
ΠΡΠΈΠΌΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ URL ΡΡΡΠ»ΠΊΠΈ Π½Π° Π½Π΅Π³ΠΎ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ
ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° app\models\Image
:, (*16)
public static function upload($imageBinary)
{
$path = Yii::$app->storage->upload('images', $imageBinary, 'jpg');
$model = new self;
$model->path = $path;
$model->save();
return $model;
}
ΠΠ°Π»Π΅Π΅, Π² ΡΠΎΠΉ ΠΆΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠ»ΠΊΠΈ Π½Π°
ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅:, (*17)
public function getUrl()
{
return Yii::$app->storage->getUrl('images', $this->path);
}
ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:, (*18)
$image = app\models\Image::upload($imageBinary);
ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ:, (*19)
<img src="<?= $image->url ?>">
\
ΠΡΠΈΠΌΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅Ρ
ΠΆΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡ:, (*20)
public static function upload($imageBinary)
{
$path = Yii::$app->storage->images->upload($imageBinary, 'jpg');
$model = new self;
$model->path = $path;
$model->save();
return $model;
}
public function getUrl()
{
return Yii::$app->storage->images->getUrl($this->path);
}
\
Π‘ΡΠΎΠΈΡ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° getUrl
Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π½Π°Π·Π²Π°Π½ΠΈΡ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°. Π’ΠΎ Π΅ΡΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅
ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ»ΠΎΠΆΠ½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°Ρ
ΠΈ Π»Π΅Π³ΠΊΠΈΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠΈ., (*21)