Я работаю над скриптом, который позволит пользователям асинхронно загружать изображения.Вставить в 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
- Am Я правильно передает двоичный объект в базу данных?
- В чем разница между двоичным и объектным объектом ?? поскольку я могу видеть, что эти два выглядят одинаково, когда возвращаются с 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).
(Изменить) Каков ваш реальный вопрос здесь? :) Как хранить изображения, извлекать их, отображать их, ...? (BTW, если ваш вопрос относится к запросу базы данных, вам нужно сообщить нам, какую СУБД (и версию) вы используете.) – Leigh
проверить EDIT :) почти забыл, я использовал MySQL 5.5 – user2595617