Вложения, как прямые ссылки на файлы

-OZ-

Проверенные
Сообщения
107
Реакции
35
Баллы
11,025
Снова прошу помощи коллективного разума.
Храню вложения на внешнем хранилище S3 в DigitalOcean. В сообщениях на форуме они имеют ссылки вида forumdomain/attachments/filename-ext.12345/
Соответственно, весь трафик идёт через форум и мне это не нравится)
Можно ли сделать так, чтобы во вложениях указывать ссылки на файлы напрямую - cdn.ams3.digitaloceanspaces.com/data/attachments/12/12345-81ed4974faf2g2dd252308d14aa5fc86.jpg ?
 
Последнее редактирование:
Ну если у вас все по инструкции и вы используете то проблем не должно быть
 
Ну если у вас все по инструкции и вы используете то проблем не должно быть
А при чем тут s3cmd? Это утилита для переноса данных в S3-хранилище, она никак не связана с XF. Я же говорю именно про прямые ссылки на вложения на самом форуме.
 
Тогда это проще написать туда, спросить о возможности не перенаправления а прямых ссылок. Извиняюсь, видимо не понял вопроса. Но я сомневаюсь, что они будут что либо переписывать.
 
Последнее редактирование:
Я же говорю именно про прямые ссылки на вложения на самом форуме.
Ага, а права доступа как разруливать? Раздавать аттачи внешним хостом можно, это не сложно сделать, только это не S3 нужно. S3 - это просто хранилище, достаточно тупое - put/get/setacl и фактически все.
 
Ага, а права доступа как разруливать?
Мне права не нужны в принципе - всё общедоступно.

Раздавать аттачи внешним хостом можно, это не сложно сделать, только это не S3 нужно. S3 - это просто хранилище, достаточно тупое - put/get/setacl и фактически все. Раздавать аттачи внешним хостом можно, это не сложно сделать, только это не S3 нужно.
Так S3 сама по себе может отдавать прямые ссылки на файлы. То есть, даже мудрить не нужно - вставлять ссылки и всё.


P.S. Прошу прощения за ответ в двух сообщениях
 
Последнее редактирование модератором:
И вложения не хранятся в том типе, в котором были загружены
На S3 по способу, описанному выше artscripts, хранятся файлы в исходном расширении (по крайней мере, картинки). И BD Attachment Store тоже хранит файлы, правда, этот плагин позволяет сменить расширение.
 
BINGO_SHARK, а извиняюсь за оффтоп, а если я например pdf вытягиваю и качаю в прямом виде используя
Код:
class View extends XFCP_View
{
    public function renderRaw()
    {
        $attachment = $this->params['attachment'];
        
        $fileName = $attachment['filename'];
        
        $extension = \XF\Util\File::getFileExtension($fileName);
        
        if ($extension == 'pdf') 
        {
            $this->response->contentType('application/pdf', '')->setDownloadFileName($fileName, true);
            
            $resource = \XF::fs()->readStream($attachment->Data->getAbstractedDataPath());
            return $this->response->responseStream($resource, $attachment->file_size);            
        }
        
        $this->response
            ->setAttachmentFileParams($attachment->filename, $attachment->extension)
            ->header('ETag', '"' . $attachment->attach_date . '"');
        
        $resource = \XF::fs()->readStream($attachment->Data->getAbstractedDataPath());
        return $this->response->responseStream($resource, $attachment->file_size);
    }
}
Разве для других расширений это невозможно? я извиняюсь если глупый вопрос
 
Последнее редактирование:
BINGO_SHARK, а извиняюсь за оффтоп, а если я например pdf вытягиваю и качаю в прямом виде используя
Код:
class View extends XFCP_View
{
    public function renderRaw()
    {
        $attachment = $this->params['attachment'];
       
        $fileName = $attachment['filename'];
       
        $extension = \XF\Util\File::getFileExtension($fileName);
       
        if ($extension == 'pdf')
        {
            $this->response->contentType('application/pdf', '')->setDownloadFileName($fileName, true);
           
            $resource = \XF::fs()->readStream($attachment->Data->getAbstractedDataPath());
            return $this->response->responseStream($resource, $attachment->file_size);           
        }
       
        $this->response
            ->setAttachmentFileParams($attachment->filename, $attachment->extension)
            ->header('ETag', '"' . $attachment->attach_date . '"');
       
        $resource = \XF::fs()->readStream($attachment->Data->getAbstractedDataPath());
        return $this->response->responseStream($resource, $attachment->file_size);
    }
}
Разве для других расширений это невозможно? я извиняюсь если глупый вопрос
.эмм.. И? Это как бы через движок всё. Как относится к вопросу?
 
я к вопросу что если изменить выше преведенной php файл нельзя будет скачать - открыть в браузере?
я пометил что оффтоп
 
Так S3 сама по себе может отдавать прямые ссылки на файлы. То есть, даже мудрить не нужно - вставлять ссылки и всё.
S3 здесь вообще никаким боком. Nginx умеет отдавать файлы напрямую, его только вынести на поддомен на другой vds, и туда аттачи слить. В принципе, со стороны движка небольшой плагин, остальное все чисто серверная реализация. Это то что будет работать. Ну, в общем даже поверх S3, если не хватает в жизни секса.
 
Последнее редактирование:
S3 здесь вообще никаким боком. Nginx умеет отдавать файлы напрямую, его только вынести на поддомен на другой vds, и туда аттачи слить.
Я некорректно объяснил. Итак. Я ищу решение, которое будет отдавать картинки не в обёртке форума (вида forumdomain/attachments/filename-ext.12345/), а напрямую. В данный момент для этой цели использую BD Attachment Store.
Не устраивает этот плагин по нескольким причинам:
  1. С ним не работают инструменты оптимизации изображений. Что ушло в хранилище - то ушло.
  2. Он не умеет физически удалять вложения - только записи в таблице. В случае, когда вложения отображаются прямыми ссылками, функция удаления не только записи, но и файла становится важной. Поэтому удалять приходится руками, что геморройно даже с прямой ссылкой на файл.
  3. Сильно забагован
  4. Хреновая и очень медленная техническая поддержка.
При этом, я не могу отказаться от использования такого механизма, поскольку оборачивание вложений в forumdomain/attachments/filename-ext.12345/ в два раза увеличит расходы на трафик, с полутора до трех ТБ в месяц. А это уже больно.

Альтернатива -
. Её использую на другом проекте. С ней всё хорошо, за тем исключением, что с её использованием форум отображает файлы не статикой, а в обёртке.
Вот я и ищу промежуточный вариант, который обеспечивал бы отображение файлов статикой, но при этом умел бы удалять их и вообще работал так, как со стандартными вложениями.
 
Последнее редактирование:
Я ищу решение, которое будет отдавать картинки не в обёртке форума (вида forumdomain/attachments/filename-ext.12345/), а напрямую.
А я еще раз говорю что дорожным катком лепить пельмени можно, но неудобно. Вместо того, чтобы выкинуть это недоразумение, поставить нормальный vds или дедик с нормальным хранилищем, использовать/построить свой CDN с азартными играми и блудницами и нормально раздавать контент с возможностью масштабирования... Хозяин - барин, руки с этой темы умываю.
 
Вместо того, чтобы выкинуть это недоразумение, поставить нормальный vds или дедик с нормальным хранилищем
Какое недоразумение будем выкидывать?
Это?
hrdDoPc.png


или это?
oSqx5CM.png


Надежность дедика будет в несколько раз хуже, а стоимость в несколько раз больше, чем работа с облаком. Да и как это решает проблему?

использовать/построить свой CDN с азартными играми и блудницами
Чем не угодили Digitalocean, Selectel или Amazon в роли хранилищ?
 
Последнее редактирование:
Какое недоразумение будем выкидывать?

Надежность дедика будет в несколько раз хуже, а стоимость в несколько раз больше, чем работа с облаком. Да и как это решает проблему?
Просто для общего развития. 100 мбит порт с более-менее хорошим каналом можно утилизировать примерно 30Tb трафика в месяц даже на лоукост-решениях, при этом не считая трафик и имея под хранилище 1-2 Tb на каждый и не сооружая костылей. И это будет дешевле.

Чем не угодили Digitalocean, Selectel или Amazon в роли хранилищ?
Потому что это хранилища. Потому что у Digitalocean, Selectel или Amazon для раздачи контента есть CDN-решения. Потому что разрабы уже давно подумали и давно запилили
Код:
$config ['externalDataUrl'] = 'http://foo.bar.cdn.блабла.com/data';
остается только вынести аттачи на CDN и опять же, на части сервисов уже есть свои готовые решения или это весьма несложно написать самому.
 
  • Мне нравится
Реакции: -OZ-
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу