Jump to content

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


mrnagger

Recommended Posts

Я пытаюсь загрузить файл, используя внутренний 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 используется? спасибо.

 

Link to comment
Share on other sites

В функцию 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; 


 

Link to comment
Share on other sites

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 "Загрузка изображения не удалась.";
}

 

Link to comment
Share on other sites

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

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

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

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

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

Любой. 

Link to comment
Share on other sites

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;
?>


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

Link to comment
Share on other sites

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

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

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

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

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

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

Link to comment
Share on other sites

  • 1 year later...

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

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

 image.png.29de000543686b069ef22453c28cb13b.png

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

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

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...