Yii 2. 在 public 文件夹外上传文档

Yii 2. Upload document outside public folder

我需要将文件上传到服务器,因为它是个人文件,他们希望将其上传到 public 文件夹之外。我知道如何上传文件:

if ($model->load(Yii::$app->request->post())) {

            $model->document = UploadedFile::getInstance($model, 'document');
            if ($model->upload() !== false) {
                $model->save();
            }

            return $this->redirect(['view', 'id' => $model->id]);
        } else {
            return $this->render('create', [
                'model' => $model,
            ]);
        }

但是 Url 无法访问它,我该如何阅读它?我正计划创建一个动作来获取文件,但不确定 Yii 是否已经为这种情况做好了准备?

是的,Yii 可以发送文件输出,但您仍然需要创建自己的操作。

让我们假设在siteController中有以下代码特定于图像输出,您可以使用相同的方式输出其他文件。

public function actionImage($image_path) {
      Yii::$app->getResponse()->sendFile(Yii::getAlias('@image_uploads') . $image_path);
}

现在图像 src 将类似于

<img src="/site/image?image_path=/posts/1.png" /> 或等同于真实应用url routes

所以 Yii2 发送文件输出的基本函数是

Yii::$app->getResponse()->sendFile();

位于

\yii\web\Response.php