Использование торт версии 2.4.3 стабильнойCakePHP - Сохранение и обслуживающие файлы за пределами корневой директории
Так что я имею время здесь, я изменил этот плагин, чтобы сохранить файлы в папку приложения https://github.com/srs81/CakePHP-AjaxMultiUpload/
The загруженные файлы сохраняются в/public_html/app/files
Теперь странно, когда вы пытаетесь обслуживать эти файлы в представлении, я могу прочитать имя файла, размер файла, но не сам файл, изображение , pdf и т. д.
Когда я пытаюсь для доступа к файлу через прямой url, я получаю эту ошибку:
Ошибка: FilesController не удалось найти.
Как может быть, что я могу прочитать имя файла, размер файла, но не сам файл?
Необходимо сохранить файлы в папке приложения. Эти файлы должны быть защищены и, следовательно, доступны только пользователям, которые вошли в приложение. Я попытался использовать ответ файла отправки торта без каких-либо результатов.
Редактирование: Я думаю, что реальный вопрос под рукой вот как я могу читать файлы из APP. DS. «файлы»?
Посмотреть код:
public function view ($model, $id, $edit=false) {
$results = $this->listing ($model, $id);
$directory = $results['directory'];
$baseUrl = $results['baseUrl'];
$files = $results['files'];
$str = "<dt>" . __("Pictures") . "</dt>\n<dd>";
$count = 0;
$webroot = Router::url("/") . "ajax_multi_upload";
foreach ($files as $file) {
$type = pathinfo($file, PATHINFO_EXTENSION);
$filesize = $this->format_bytes (filesize ($file));
$f = basename($file);
$url = $baseUrl . "/$f";
if ($edit) {
$baseEncFile = base64_encode ($file);
$delUrl = "$webroot/uploads/delete/$baseEncFile/";
$str .= "<a href='$delUrl'><img src='" . Router::url("/") .
"ajax_multi_upload/img/delete.png' alt='Delete' /></a> ";
}
$str .= "<img src='$url' /> ";
$str .= "<a href='$url'>" . $f . "</a> ($filesize)";
$str .= "<br />\n";
}
$str .= "</dd>\n";
return $str;
}
И загрузить/сохранить
public function upload($dir=null) {
// max file size in bytes
$size = Configure::read ('AMU.filesizeMB');
if (strlen($size) < 1) $size = 20;
$relPath = Configure::read ('AMU.directory');
if (strlen($relPath) < 1) $relPath = "files";
$sizeLimit = $size * 1024 * 1024;
$this->layout = "ajax";
Configure::write('debug', 0);
$directory = APP . DS . $relPath;
if ($dir === null) {
$this->set("result", "{\"error\":\"Upload controller was passed a null value.\"}");
return;
}
// Replace underscores delimiter with slash
$dir = str_replace ("___", "/", $dir);
$dir = $directory . DS . "$dir/";
if (!file_exists($dir)) {
mkdir($dir, 0777, true);
}
$uploader = new qqFileUploader($this->allowedExtensions,
$sizeLimit);
$result = $uploader->handleUpload($dir);
$this->set("result", htmlspecialchars(json_encode($result), ENT_NOQUOTES));
}
Единственного реального изменения от первоначальных вилок в меняются Wwwroot АРР, чтобы сделать выключатель. Сохранение прекрасно и прекрасно. Но его просто странно, что я не могу прочитать имя файла, размер файла в представлении не проблема, но не могут просматривать изображения, PDF и т.д.
Отлично. Это недостающая деталь, которую я искал. – hyperweb
Спасибо за это. Это здорово! – manospro
Можете ли вы привести пример кода для Cake 3? – efwjames