Качвайте файлове с помощта на cakephp 3 и ги съхранявайте в blob

Знам, че съхраняването на файлове в база данни е малко мръсно, но трябва да кача и съхраня файл в база данни BLOB и не намерих никаква документация за това и не намерих никаква следа, така че всяка помощ относно ще бъде оценено.

Благодаря предварително, Дейвид


person GoBo    schedule 28.08.2015    source източник
comment
Обикновено във вашия манипулатор за качване получавате препратка към временния файл, който е създаден, и го премествате където искате. Вместо това изглежда, че искате да използвате file_get_contents и да запишете тези данни в базата данни. Не мисля, че всичко това е специфично за тортата; може би затова не сте намерили документация, свързана с тази конкретна задача.   -  person Greg Schmidt    schedule 29.08.2015
comment
Така че ¿няма начин да се възползвате от скелето и/или ORM съоръженията? Чувствам, че ми липсва нещо.   -  person GoBo    schedule 30.08.2015


Отговори (1)


Няма нищо специално, което трябва да направите, просто задайте данните, които искате да съхранявате в съответното свойство на обект (съответно ключ на масив), или като низ, или като поток.

BLOB колони автоматично ще бъдат свързани с \Cake\Database\Type\BinaryType тип база данни, където се обработва всичко, което е необходимо за съхраняване/четене на двоични данни.

Ето един абстрактен пример, показващ възможни случаи на употреба

$data = [
    'file_a' => file_get_contents('path/to/file.ext'),
    'file_b' => fopen('path/to/file.ext', 'r'),
    'file_c' => 'foo bar baz'
];
$entity = $Table->newEntity($data);
$Table->save($entity);

Четените обекти винаги ще държат данните като потоци, така че можете да ги използвате с Файлова система и Поток функции, като

$handle = $Table->get(1)->file_a;
while (!feof($handle)) {
    echo fread($handle, 8192);
}
echo stream_get_contents($Table->get(1)->file_a);
person ndm    schedule 30.08.2015