Zend Framework 1.9.6 を使用しています。結末を除けば、ほぼ理解できたと思います。これは私がこれまでに持っているものです:
形:
<?php
class Default_Form_UploadFile extends Zend_Form
{
public function init()
{
$this->setAttrib('enctype', 'multipart/form-data');
$this->setMethod('post');
$description = new Zend_Form_Element_Text('description');
$description->setLabel('Description')
->setRequired(true)
->addValidator('NotEmpty');
$this->addElement($description);
$file = new Zend_Form_Element_File('file');
$file->setLabel('File to upload:')
->setRequired(true)
->addValidator('NotEmpty')
->addValidator('Count', false, 1);
$this->addElement($file);
$this->addElement('submit', 'submit', array(
'label' => 'Upload',
'ignore' => true
));
}
}
コントローラ:
public function uploadfileAction()
{
$form = new Default_Form_UploadFile();
$form->setAction($this->view->url());
$request = $this->getRequest();
if (!$request->isPost()) {
$this->view->form = $form;
return;
}
if (!$form->isValid($request->getPost())) {
$this->view->form = $form;
return;
}
try {
$form->file->receive();
//upload complete!
//...what now?
$location = $form->file->getFileName();
var_dump($form->file->getFileInfo());
} catch (Exception $exception) {
//error uploading file
$this->view->form = $form;
}
}
今、私はファイルで何をしますか? /tmp
デフォルトで私のディレクトリにアップロードされています。明らかに、それは私がそれを維持したい場所ではありません。アプリケーションのユーザーがダウンロードできるようにしたい。つまり、アップロードしたファイルをアプリケーションのパブリック ディレクトリに移動し、ファイル名をデータベースに保存して、URL として表示できるようにする必要があると考えています。
または、これを最初にアップロード ディレクトリとして設定します (ただし、以前にアップロードしようとしたときにエラーが発生しました)。
以前にアップロードされたファイルを操作したことがありますか? 私が取るべき次のステップは何ですか?
解決:
アップロードしたファイルをdata/uploads
(アプリケーションのすべてのバージョンからアクセスできるようにするために、アプリケーションの外部のディレクトリへのシンボリック リンクです) に配置することにしました。
# /public/index.php
# Define path to uploads directory
defined('APPLICATION_UPLOADS_DIR')
|| define('APPLICATION_UPLOADS_DIR', realpath(dirname(__FILE__) . '/../data/uploads'));
# /application/forms/UploadFile.php
# Set the file destination on the element in the form
$file = new Zend_Form_Element_File('file');
$file->setDestination(APPLICATION_UPLOADS_DIR);
# /application/controllers/MyController.php
# After the form has been validated...
# Rename the file to something unique so it cannot be overwritten with a file of the same name
$originalFilename = pathinfo($form->file->getFileName());
$newFilename = 'file-' . uniqid() . '.' . $originalFilename['extension'];
$form->file->addFilter('Rename', $newFilename);
try {
$form->file->receive();
//upload complete!
# Save a display filename (the original) and the actual filename, so it can be retrieved later
$file = new Default_Model_File();
$file->setDisplayFilename($originalFilename['basename'])
->setActualFilename($newFilename)
->setMimeType($form->file->getMimeType())
->setDescription($form->description->getValue());
$file->save();
} catch (Exception $e) {
//error
}