2013-09-14 1 views
1

Я работаю над скриптом, который позволит пользователям асинхронно загружать изображения.Вставить в DB и вывести изображения blob с использованием Coldfusion 10

сценарий содержит несколько сегментов кода, и в то время как большинство из них работает как очарование, которое я испытывал при попытке конвертировать объект изображения с холодным слиянием в blob, передать его другому объекту (метод компонента cfc), вставить значения в DB, используя хранимую процедуру и окончательно выводящие изображения blob, чтобы увидеть результат.

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

<cfimage source="#CFFILE.ServerDirectory#\#CFFILE.ServerFile#" 
     name="Image" overwrite="no"> 
     <cfif ImageGetWidth(Image) lt 1024> 
     <cfset ArrayAppend(set.Errors,"you can not add image that's less than 1024px wide")> 
     <cfelse> 

     <!---now resize image scale to fit (709px wide)---> 
     <cfset ImageSetAntialiasing(Image,"on")> 
     <cfset ImageScaleToFit(Image,709,"","highestPerformance")> 

      <!---now crop image if height is more than 350px---> 
      <cfif ImageGetHeight(Image) gt 350> 
      <cfset yPosition = (ImageGetHeight(Image) - 350)/2> 
      <cfset ImageCrop(Image, 0, yPosition, ImageGetWidth(Image), 350)> 
      </cfif> 

     </cfif> 
    </cfif> 

    <cfif ArrayLen (set.Errors) is 0> 
    <cfset testAddImage = testImg.AddImage(finalImage=#ImageGetBlob(Image)#)> 
    </cfif> 

нужно признать, что не использовали много функций изображений с CF, следовательно, я нужно выучить несколько трюков. в любом случае, поскольку я вижу, что этот тестовый код, по-видимому, работает, учитывая, что все значения аккуратно добавляются в БД каждый раз, когда форма отправляется, и не возникают ошибки CF или клиентской стороны. с другой стороны, хотя я много читал о выпуске blob, я довольно сильно смущен, что лучший подход для достижения этого с CF 10., который сказал, должен ли я использовать cfcontent, binaryEncode, в строку или что-то еще, чтобы сделать это правильно.

Я также попытался установить двоичный объект,

<cffile action = "readBinary" file = "#CFFILE.ServerDirectory#\#CFFILE.ServerFile#" variable = "Image"> 

, а также установить ImageNew, однако, как я мог видеть все, что было то же самое. есть ли разница между двоичным и объектом изображения !?

EDIT

  1. Am Я правильно передает двоичный объект в базу данных?
  2. В чем разница между двоичным и объектным объектом ?? поскольку я могу видеть, что эти два выглядят одинаково, когда возвращаются с JSON и отображаются на клиенте (предупреждение). 3. Самый важный вопрос - как выводить изображения блоба?

, который сказал, что я выведу первую серверную страницу X (например, первую страницу) и разрешаю пользователям загружать больше с помощью вызова jQuery AJAX.

на стороне сервера, я бы что-то вроде этого:

<cfset sqlQueries = createObject ("component","cfc.sqlQueries")> 
<cfset loadImages = sqlQueries.LoadImagesDB(orderBy="Date")> 
<cfoutput query="loadImages"> 
#image# - how to display blob images here 
</cfoutput> 

, что это лучший способ, чтобы получить блоб изображение, cfcontent, binaryEncode, нанизывать ... я должен использовать writeToBrowser? Я действительно не имеют большого опыта работы с функциями изображения в CF и сгустка, так что я был бы очень признателен, если вы могли бы помочь мне разобраться :)

EDIT

@Leigh «Хороший способ узнать больше - попробовать их всех ». в то время как я ждал, что кто-то ответит здесь, я прочитал и протестировал все вышеупомянутые функции CF и пришел к выводу (вы также указали), что action = writeToBrowser - это способ, как он отлично работает, более конкретно может сжимать изображения в процессе.

«Очевидный недостаток для хранения базы данных - это может значительно увеличить размер вашей базы данных», спасибо за то, что вы подняли это, это моя самая большая проблема.Я лично храню изображения в папках, но мой партнер (который, кстати, эксперт по БД) настаивал на использовании капли, хотя он призывая меня сжимать изображения столько, сколько я могу, сохраняя при этом производительность.

, который сказал, что код выше сжатия (при изменении размера) говорит, что изображение 900 КБ до 200-300 кб, которое по-прежнему остается большим, если вы спросите меня, и в конечном итоге приведет к тому, что вы указали (более медленное время отклика db, медленное резервное копирование и т. д.), хотя у нас есть только два идентификатора столбца и изображение (longblob).

, который сказал, что код выше сжатия (при изменении размера) говорит, что изображение 900 КБ до 200-300 кб, которое по-прежнему остается большим, если вы спросите меня, и в конечном итоге приведет к тому, что вы указали (более медленное время отклика db, медленное резервное копирование и т. д.), хотя у нас есть только два идентификатора столбца и изображение (longblob).

+2

(Изменить) Каков ваш реальный вопрос здесь? :) Как хранить изображения, извлекать их, отображать их, ...? (BTW, если ваш вопрос относится к запросу базы данных, вам нужно сообщить нам, какую СУБД (и версию) вы используете.) – Leigh

+0

проверить EDIT :) почти забыл, я использовал MySQL 5.5 – user2595617

ответ

3

1. Я правильно передаю двоичный объект в базу данных?

Чтобы ответить на этот вопрос, нам нужно увидеть фактический код функции, которая добавляет изображение в базу данных, и узнать тип данных, которые вы используете для целевого столбца (blob, longblob, ..).

Кроме того, если вы не знакомы с хранением капель в базе данных, вы должны обязательно взвесить все за и против database versus file system storage. У обоих есть недостатки, но один очевидный недостаток для хранилища баз данных - это может значительно увеличить размер вашей базы данных, особенно если вы храните большие изображения.

2. В чем разница между двоичным и графическим объектом?

Объект изображения CF - это всего лишь обертка вокруг данных двоичного изображения. Оболочка содержит двоичные данные, а также дополнительные (CF-специфические) методы, которые используются CF-сервером при вызове любого из встроенных меток/функций изображения.

3. Как выводить капли изображения? Каков наилучший способ получить изображение blob, cfcontent, binaryEncode, в строку ... Должен ли я использовать writeToBrowser?

Лучшее относительно. За исключением toString(), любой из этих методов может использоваться для отображения изображения. Все зависит от того, как и где вы хотите отображать их. В этом случае использование action=writeToBrowser, вероятно, будет самым простым. source может быть либо объектом изображения CF, либо необработанным двоичным кодом изображения.

  • action=writeToBrowser - Записывает двоичные данные во временный файл на диске и генерирует <img> тег для вас. Если вы используете тег, и сделать источник просмотра, вы увидите, что он создает что-то вроде этого:

    <img src="/CFFileServlet/_cf_image/_cfimgxxxx.PNG" alt="" /> 
    
  • cfcontent Обычно используется для возвращения один файл, например, для загрузки файла. Его можно использовать вместе с встроенными изображениями, но он будет включать отдельный скрипт, который возвращает двоичное изображение с <cfcontent>. Отдельный сценарий затем используется как источник встроенного тега изображения <img src="somePageWithCFContent.cfm?param=...." />

  • binaryEncode(binary, encoding) Может использоваться для embed an image as base64. (Лучше подходит для меньших изображений, а поддержка браузера меняется).

Хороший способ узнать больше - попробовать все. Просмотрите документацию по каждой функции, запустите некоторый тестовый код, затем проверьте «источник просмотра» сгенерированного html. Это даст вам хорошее представление о том, как каждый из них работает.

+0

первое спасибо за ваш подробный ответ , я действительно ценю это :) – user2595617

+0

сейчас, есть ли способ дополнительно сжать изображения, прежде чем вставлять их в БД без существенного замедления приложения. – user2595617

+0

Я проверил все доступные алгоритмы изображения CF для изменения размера и могу сказать, что нет большой разницы в размере конечного изображения. так как я могу еще сжать изображения, прежде чем приступать к вставке БД. – user2595617

Смежные вопросы