Yii - Przesyłanie plików
Możesz łatwo zaimplementować funkcję przesyłania plików za pomocą yii\web\UploadedFile, models i yii\widgets\ActiveForm.
Utwórz katalog ‘uploads’w folderze głównym. W tym katalogu będą przechowywane wszystkie przesłane obrazy. Aby przesłać pojedynczy plik, musisz utworzyć model i atrybut modelu dla przesłanej instancji pliku. Powinieneś także sprawdzić poprawność przesłania pliku.
Step 1 - Wewnątrz models folder, utwórz plik o nazwie UploadImageForm.php z następującą treścią.
<?php
namespace app\models;
use yii\base\Model;
class UploadImageForm extends Model {
public $image; public function rules() { return [ [['image'], 'file', 'skipOnEmpty' => false, 'extensions' => 'jpg, png'], ]; } public function upload() { if ($this->validate()) {
$this->image->saveAs('../uploads/' . $this->image->baseName . '.' .
$this->image->extension);
return true;
} else {
return false;
}
}
}
?>
Plik imageatrybut jest używany do zachowania instancji pliku. Plikfile reguła walidacji zapewnia, że plik ma rozszerzenie png lub a jpgrozbudowa. Funkcja przesyłania sprawdza poprawność pliku i zapisuje go na serwerze.
Step 2 - Teraz dodaj actionUploadImage funkcji do SiteController.
public function actionUploadImage() {
$model = new UploadImageForm();
if (Yii::$app->request->isPost) { $model->image = UploadedFile::getInstance($model, 'image'); if ($model->upload()) {
// file is uploaded successfully
echo "File successfully uploaded";
return;
}
}
return $this->render('upload', ['model' => $model]);
}
Step 3 - Po przesłaniu formularza dzwonimy do yii\web\UploadedFile::getInstance() funkcję reprezentującą przesłany plik jako plik UploadedFileinstancja. Następnie sprawdzamy plik i zapisujemy go na serwerze.
Step 4 - Następnie utwórz plik upload.php Wyświetl plik wewnątrz views/site informator.
<?php
use yii\widgets\ActiveForm;
?>
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']])?> <?= $form->field($model, 'image')->fileInput() ?>
<button>Submit</button>
<?php ActiveForm::end() ?>
Pamiętaj, aby dodać enctype opcja podczas przesyłania pliku. The fileInput() metoda renderuje następujący kod html -
<input type = "file">
Powyższy kod html umożliwia użytkownikom wybieranie i przesyłanie plików.
Step 5 - Teraz, jeśli pójdziesz do http://localhost:8080/index.php?r=site/upload-imagezobaczysz, co następuje.
Step 6- Wybierz obraz do przesłania i kliknij przycisk „Prześlij”. Plik zostanie zapisany na serwerze wewnątrz pliku‘uploads’ teczka.