Я следил за кулинарной Cakes для отправки файлов (http://book.cakephp.org/3.0/en/controllers/request-response.html#sending-files) но я столкнулся со странной проблемой.
PDF, DOC и другие двоичные файлы работают просто отлично. Но когда я пытаюсь загрузить / показать изображение (JPG или PNG), файл повреждается сам.
Загруженный файл не распознается как изображение. У него точно такой же размер, как и у оригинала, но когда я его различаю, они совершенно разные.
В интернете я не нашел ничего похожего на торт, поэтому надеюсь, вы мне поможете!
Приведенный ниже код является моим действием загрузки
public function arquivo($id) {
$file = $this->Arquivos->get( $id );
$this->response->file($file['filename'], ['download' => true]);
// Return response object to prevent controller from trying to render
// a view.
return $this->response;
}
Заголовки ответа:
Accept-Диапазоны: байт
Cache-Control: нет хранилища, нет кэша, необходимо повторно проверить, пост-проверка = 0, предварительная проверка = 0
Connection: Keep-Alive
Content-Length: 121000
Content-Type: изображение / JPEG
Дата: чт, 24 ноября 2016 г. 16:17:49 GMT
Истекает: четверг, 19 ноября 1981 года, 08:52:00 по Гринвичу
Keep-Alive: тайм-аут = 5, максимум = 100
Pragma: нет кэша
Сервер: Apache / 2.4.10 (Ubuntu)
Проверьте путь к файлу и MIME Types правильно.
public function arquivo($id) {
$file = $this->Arquivos->get( $id );
$this->response->file(
$file['filename'], #Check $file['filename'] is full path of your download file
[
'download' => true,
'name' => 'Your_Download_File_Name_Here'
]
);
return $this->response;
}
Пример:
Ваш $file['filename']
переменная должна быть /path/to/your/file.jpg
Также проверьте правильность
MIME TYPES
от CakePHP 3 Отправка или загрузка файлов
У меня та же проблема с загрузкой файлов jpg и xlsx.
Мой код довольно прост:
public function download() {
$response = $this->response->withFile($template_file_path, ['download' => true]);
return $response;
}
По сравнению с 2 файлами (исходный файл И загруженный файл, который поврежден) с двоичным редактором, разница в 1 байт. Я не знаю почему, но 0x20
был добавлен в верхней части файла.