Перейти к содержанию

Загрузка файла изображения с помощью внутреннего интерфейса IPS api


Рекомендуемые сообщения

Я пытаюсь загрузить файл, используя внутренний IPS api и $_FILES php:

<?php
$_SERVER['SCRIPT_FILENAME']    = __FILE__;
require_once 'init.php';

$init = \IPS\Session\Front::i();

echo "Filename: " . $_FILES['file']['name']."<br>";
echo "Type : " . $_FILES['file']['type'] ."<br>";
echo "Size : " . $_FILES['file']['size'] ."<br>";
echo "Temp name: " . $_FILES['file']['tmp_name'] ."<br>";
echo "Error : " . $_FILES['file']['error'] . "<br>";

$image = \IPS\Image::create( $_FILES['file']['tmp_name'] );
echo $image;
?>

к сожалению, это не работает, кто-нибудь знает, какой API используется? спасибо.

 

Ссылка на комментарий
Поделиться на другие сайты

В функцию create надо передавать contents() объекта \IPS\File, т.е. содержимое, а не имя. Простой пример с чтением фотографии профиля:

	$member = \IPS\Member::load( 1 );
        $img = \IPS\File::get( 'core_Profile', $member->pp_main_photo );
        $image = \IPS\Image::create( $img->contents() );
        header('Content-Type: image/jpg');        
        echo $image; 


 

Ссылка на комментарий
Поделиться на другие сайты

7 hours ago, Desti said:

В функцию create надо передавать contents() объекта \IPS\File, т.е. содержимое, а не имя. Простой пример с чтением фотографии профиля:

	$member = \IPS\Member::load( 1 );
        $img = \IPS\File::get( 'core_Profile', $member->pp_main_photo );
        $image = \IPS\Image::create( $img->contents() );
        header('Content-Type: image/jpg');        
        echo $image; 


 

нужно ли мне передавать объект \IPS\File? или это может быть любой IMG файл на диске?
например:

$uploaddir = 'uploads/';
$uploadfile = $uploaddir . basename($_FILES['image']['name']);

if (move_uploaded_file($_FILES['image']['tmp_name'], $uploadfile))
{
    $image = \IPS\Image::create( $uploadfile );
    echo "Изображение успешно загружено.";
} 
else
{
    echo "Загрузка изображения не удалась.";
}

 

Ссылка на комментарий
Поделиться на другие сайты

Вы опять пытаетесь подсунуть в \IPS\Image::create() имя файла! Я же русскими буквами написал - содержимое в оригинальном виде, т.е.

$image = \IPS\Image::create( file_get_contents($uploadfile) );

И ваш if-else проверяет, скопировался ли файл, а не успешность преобразования в изображение. У create() своя проверка внутри, он выбросит исключение, если файл не картинка.

6 часов назад, mrnagger сказал:

или это может быть любой IMG файл на диске?

Любой. 

Ссылка на комментарий
Поделиться на другие сайты

3 hours ago, Desti said:

Вы опять пытаетесь подсунуть в \IPS\Image::create() имя файла! Я же русскими буквами написал - содержимое в оригинальном виде, т.е.

$image = \IPS\Image::create( file_get_contents($uploadfile) );

И ваш if-else проверяет, скопировался ли файл, а не успешность преобразования в изображение. У create() своя проверка внутри, он выбросит исключение, если файл не картинка.

Любой. 

С вашей помощью я пришел к такому решению (оно работает, но мне не очень нравится делать это через вложения):

<?php
$_SERVER['SCRIPT_FILENAME']    = __FILE__;
require_once 'init.php';
$init = \IPS\Session\Front::i();
$file = \IPS\File::create( 'core_Attachment', basename($_FILES['file']['name']), NULL, NULL, FALSE, $_FILES['file']['tmp_name'] );
$attachment = $file->makeAttachment('', \IPS\Member::load( 1 ) );
$fileName = htmlspecialchars( $attachment['attach_file'], ENT_DISALLOWED, 'UTF-8', TRUE );
$image = <<<IMAGE
<a href="<fileStore.core_Attachment>/{$file}" class="ipsAttachLink ipsAttachLink_image" style="float:left;"><img data-fileid="{$attachment['attach_id']}" src="<fileStore.core_Attachment>/{$file}" class="ipsImage ipsImage_thumbnailed" style="margin:10px;" alt="{$fileName}"></a>
IMAGE;
?>


Хотя это и не идеально, но возможно ли сделать загрузку без вложений?
Большое спасибо за вашу помощь!

Ссылка на комментарий
Поделиться на другие сайты

9 часов назад, mrnagger сказал:

но возможно ли сделать загрузку без вложений?

Да, в чем проблема? В этом примере 

if (move_uploaded_file($_FILES['image']['tmp_name'], $uploadfile))
{
    $image = \IPS\Image::create( file_get_contents($uploadfile) );
} 

весь функционал в двух строчках. Через банальную upload форму загружаем файл, копируем его куда нужно, превращаем в изображение.

Но я до сих пор не понимаю, зачем вам это нужно и что вы хотите сделать. 

Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

Подскажите пожалуйста, не нашел тему решил тут написать. 

Как включить файлы на сайте? как тут

 image.png.29de000543686b069ef22453c28cb13b.png

Запрошенный URL /files/category/ не был найден на этом сервере. такая ошибка у меня при воде ссылки на файлы 

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...