Отображение фотогалереи с использованием Asp.Net и SQL - PullRequest
1 голос
/ 06 апреля 2009

Я недавно добавил фотографии в свою базу данных SQL и отобразил их на странице * .aspx, используя Asp: Image. ImageUrl для этого элемента управления хранится на отдельной странице * .aspx. Отлично работает для фотографий профиля.

У меня под рукой новая проблема. Мне нужно, чтобы у каждого пользователя была своя страница фотогалереи. Я хочу, чтобы фотографии были сохранены в базе данных SQL. Хранить фотографии не сложно. Проблема с отображением фотографий. Я хочу, чтобы фотографии сохранялись в виде сетки миниатюр, когда пользователь нажимает на фотографию, она должна поднять фотографию на отдельной странице.

Какой лучший способ сделать это. Очевидно, что это не использовать Asp: Image. Мне любопытно, должен ли я использовать Gridview. Если да, то как мне это сделать, и должен ли размер их миниатюры сохраняться в базе данных для этого?

После того, как на картинке кликнуть, как выглядит другая страница, чтобы на ней отображалось правильное изображение. Я думаю, что не правильно отправлять photoId через URL.

Ниже приведен код со страницы, которую я использую для отображения фотографий профиля.

защищенный void Page_Load (отправитель объекта, EventArgs e) {

 string sql = "SELECT [ProfileImage] FROM [UserProfile] WHERE [UserId] = '" + User.Identity.Name.ToString() + "'";

 string strCon = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["SocialSiteConnectionString"].ConnectionString;
    SqlConnection conn = new SqlConnection(strCon);

 SqlCommand comm = new SqlCommand(sql, conn);

 conn.Open();

 Response.ContentType = "image/jpeg";

 Response.BinaryWrite((byte[])comm.ExecuteScalar());

 conn.Close();

}

Ответы [ 6 ]

1 голос
/ 06 апреля 2009

Давайте разберем ваш вопрос:

Должен ли их размер миниатюры сохраняться в базе данных для этого?
Да. При первом запросе миниатюры фотографии создайте миниатюру и сохраните ее в БД для последующего доступа

Очевидно, что не использовать Asp: Image
Нет проблем с использованием Asp: Image. Вам будет хорошо с этим

Мне любопытно, стоит ли использовать Gridview
Возможно, повторитель лучше, но вам будет хорошо с сеткой, если вы с ней знакомы

Я думаю, что отправлять фотоидентификатор через URL некорректно.
Это правильно, но вы должны проверить, принадлежит ли фотография текущему пользователю (не доверяйте URL.

Создание эскиза
Вы узнаете, что изображение с измененным размером, созданное .net, имеет низкое качество. Вы должны использовать кун-фу GDI, чтобы получить качественные фотографии. Обратитесь к этому сообщению http://codebetter.com/blogs/brendan.tompkins/archive/2004/01/26/use-gdi-to-save-crystal-clear-gif-images-with-net.aspx, чтобы узнать больше

1 голос
/ 06 апреля 2009

"ImageUrl для этого элемента управления хранится на отдельной странице * .aspx. Он отлично работает для изображений профиля." - вместо страницы .aspx, почему бы не использовать общий обработчик ASP.NET (.ashx)? Они немного легче, чем ASPX. Просто найдите «ASP.NET Generic Handler», и вы найдете несколько примеров. По сути, это код, который у вас есть за страницей .aspx, но без дополнительных затрат на инициализацию / рендеринг страницы.

«Я хочу, чтобы фотографии сохранялись в виде сетки миниатюр, когда пользователь нажимает на фотографию, она должна поднять фотографию на отдельной странице». - Я думаю, что любой повторяемый элемент управления ASP.NET, который поддерживает создание шаблонов элемента item (например, DataGrid, GridView, Repeater, ListView в ASP.NET 3.5 и т. Д.), Должен помочь вам в этом. Просто установите изображение или asp: Высота и ширина изображения в соответствии с вашими миниатюрами. Оберните, какие теги вы используете в HTML-привязке с ссылкой на страницу, которая отображает изображение в «полном размере».

0 голосов
/ 19 мая 2009

Если вы не хотите изобретать велосипед, вы можете интегрировать галерею с открытым исходным кодом, например Gallery Server Pro (www.galleryserverpro.com), в свой сайт. Он написан на C # / ASP.NET и делает все, что вы хотите.

Роджер

[отказ от ответственности] Я - создатель и ведущий разработчик Gallery Server Pro [/ disclaimer]

0 голосов
/ 27 апреля 2009

Элемент управления RbmBinaryImage поможет вам отображать изображения непосредственно из вашей базы данных. Вы можете привязать поле Image непосредственно к свойству ImageContent, а также указать, хотите ли вы, чтобы изображение отображалось в виде миниатюры, или указать размер миниатюры.

чтобы получить это перейдите к http://www.ramymostafa.com/?p=187

0 голосов
/ 06 апреля 2009

Вы можете попробовать это или это . Они должны помочь вам начать со стороны сетки. Правильно при отправке imageid с URL. Посмотрите переменную сеанса или скрытый элемент управления, опубликуйте форму и прочитайте ее на следующей странице.

Я бы посмотрел на сетку и использовал столбец шаблона в сочетании с тегом html image в сетке. Создайте миниатюру при загрузке и сохраните их в базе данных. Оттуда вы можете легко получить его. Таким образом, отображение изображения происходит быстрее, и нет необходимости в преобразованиях миниатюр во время отображения.

0 голосов
/ 06 апреля 2009

Хорошо, у вас была бы страница для отображения фотографии (как у вас выше), но ваши критерии были бы другими. Вы бы не использовали WHERE [UserId] = '" + User.Identity.Name, но должны были бы отправить идентификатор строки запроса для идентификатора фотографии в базе данных.

Тогда, когда вы хотите, чтобы изображение на вашей странице aspx, вы должны поставить HTML-тег изображения <image src="photo.aspx?id=2" />

То, как вы размещаете HTML-теги изображений на странице, не имеет значения.

...