то смысл файл получать по прямой ссылке
статика она и в африке статика
имея на руках адрес к файлу не сложно сгенерить к нему заголовки, расширение то в адресе указано.
Delphinum,у меня что то похожее, только проверкой и генерацией в сл. отсутствия занимается прослойка между хранилищем и логикой запрашивающей аватарки бгшки и т.д.
app::storage()->setUserUploadDir('public');
app::storage()->avatar = 'profile/avatars';
app::storage()->background = 'profile/background';
app::storage()->audioFile = 'music';
app::storage()->videoFile = 'video/file';
app::storage()->videoScreen = 'video/screen';
app::storage()->forum = 'forum';
app::storage()->systemImages = 'system/images';
app::storage()->tmpUpload('upload');
app::storage()->registerMethod('avatar', function($id, $type = false)
{
if($type==true){
return app::storage()->fileExists(app::storage()->path('avatar').'/'.$id.'.png') ? '/'.app::storage()->path('avatar').'/'.$id.'.png' : null;
}else{
return '/'.app::storage()->path('avatar').'/'.$id.'.png';
}
} );
app::storage()->registerMethod('defaultAvatar', function()
{
return '/'.app::storage()->path('systemImages').'/noavatar.png';
} );
вот запилил аплоад
критикуйте , пока не до конца оттестил, и еще надо пару методов написать
Пожалуй напишу свой вариант. Загрузка фалов интересная тема)
Заодно покажу Вам свои знания.
Koenig, некошерно забивать глобальную область своими function autoload, лучше делать сразу так:
spl_autoload_register(function($class){
$file = 'classes/' . $class . '.php';
file_exists($file) ? require_once($file) : exit('Underfined class - ' . $class);
});
А еще лучше сразу через composer, если уж он у вас используется.
Koenig,
echo '<form action="?" enctype="multipart/form-data" method="post">
...
любите вы извращения. Почему не:
include 'form.html';
?
Koenig, а еще кошернее сразу разделять на модель и представление:
<form action="?" enctype="multipart/form-data" method="post">
<div><input type="file" name="file[]" /></div>
<div><input type="file" name="file[]" /></div>
<div><input type="file" name="file[]" /></div>
<div><input type="file" name="test" /></div>
<div><input type="file" name="file2[]" /></div>
<div><input type="file" name="file2[]" /></div>
<div><input type="file" name="file2[]" /></div>
<div><input type="submit" name="submit" value="submit" /></div>
</form>
<pre>
<?php
print_r($viewModel, 1);
?>
</pre>
if (count($_FILES) > 0) {
#echo '<pre>' . print_r($_FILES, 1) . '</pre>';
$upload = new Kupload('load');
$viewModel = $upload->filestorage->map();
}
else{
$viewModel = [];
}
include 'form.phtml';
Koenig, Kfile::data
такие имена допустимо использовать только в случае, если метод является как setter так и getter, на пример:
public function size($size = null){
if(!is_null($size)){
$this->size = $size;
}
return $this->size;
}
у тебя это чистый getter, потому надо getData.
Метод generatehash лучше сделать protected, так как он не будет вызываться из вне класса. Я бы еще переименовал его в generateHash.
public function __construct($file)
Тут нужно либо документировать, что такое $file, либо изменить имя аргумента на $filePath или $fileAddress.
Я думаю, что уже, как на званном ужине, где познакомился и душевно разговорился с хорошей девушкой, пора перейти от теории
в постель к практике
1) Запилите отдельный реп на Гитхабе.
2) Залейте туда скелет обсуждаемого предмета. Это может быть всего пустые папки и composer.json с прописанными namespaces в корне, чтоб любой мог без анальных мук затестировать.
3) Ну и далее дерзайте. каждый из предложивших свое решение может иметь отдельную ветку.
В общую ветку сливаете только те решения, о которых однозначно договорились.
З.Ы.
Все ветки в Гитхабе должны придерживаться скелета, то есть где валяются файлы и Namespace.
Хотя разумеется. каждый сам может запилить себе composer.json с нужными зависимостями и неймспейсами.
Главное, чтоб потом то, о чем все договорились, сливалось в общую ветку.
AlkatraZ, да тут как бы тоже без анальных мук, скачал, распаковал, запустил