Jump to content
View in the app

A better way to browse. Learn more.

IPBMafia.ru - поддержка Invision Community, релизы, темы, плагины и приложения

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

Posted

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


 

  • Author
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 файл на диске?

Любой. 

  • Author
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 year later...

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

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

 image.png.29de000543686b069ef22453c28cb13b.png

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

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
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.