Защита носителей изображений в веб-приложении [закрыто]

StackOverflow https://stackoverflow.com/questions/374418

Вопрос

мы поддерживаем базу данных мультимедийных изображений в крупномасштабном веб-приложении.Файлы JPG с высоким разрешением имеют большой размер (> 15 МБ) и ни в коем случае не должны быть доступны для скачивания.Теперь нам нужно предоставить клиентам доступ к деталям (обрезке) изображений (например, функция увеличения).Клиент должен видеть уменьшенную версию изображения и иметь возможность выбрать его область для просмотра в полномасштабном режиме (100%).

Как это могло бы быть реализовано наиболее эффективным способом (с точки зрения трафика и процессора)?Мы открыты для любого решения, пока файл изображения с высоким разрешением остается защищенным.Приложение разработано на c # и .net framework 3.5.

Есть какие-нибудь идеи?Заранее спасибо!

Это было полезно?

Решение

Первое, что вам нужно будет сделать, это сжать изображения и поставить водяные знаки перед их загрузкой на сервер.Затем представьте их пользователю.Это потребует наименьших ресурсов процессора, так как изображения на них будут статичными.

Лично я бы затем обрезал изображения для полноразмерных версий и разместил их рядом со сжатыми.Таким образом, клиент может просмотреть полное изображение (хотя и сжатое и с водяными знаками) наряду с небольшим образцом полной версии hi-res.

Вероятно, вы хотите избежать манипуляций с изображениями "на лету", если только у вас не мало клиентов и не очень мощный сервер.

Другие советы

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

Как я говорю своему отцу (который не понимает, как работает Интернет), если вы можете увидеть это на веб-странице, вы можете сохранить это, вопрос только в том, как это сделать.

Существует ajax-версия Deep Zoom, которая может вам понравиться - Смотрите Dragon:

http://livelabs.com/seadragon-ajax/gallery/

Пользователю предоставляется версия изображения с низким разрешением;затем они могут увеличить любую его часть, которая им нравится.

Во-первых, я бы предварительно отрисовал версии с водяными знаками всех полноразмерных изображений, сохранив их в сжатом формате файла, а также предварительно отрисованные версии с низким разрешением.

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

В момент подтверждения у меня был бы второй выделенный сервер обработки изображений, который обрезал бы изображение без водяных знаков, передал обрезанное изображение на веб-сервер, который отправил его клиенту.

Тем не менее, все еще было бы возможно создать скрипт на стороне клиента, который обрабатывал обрезанные части и соединял их вместе, чтобы создать полноразмерную копию изображения без водяных знаков.

не должно быть доступно для загрузки любым способом.

находится в противоречии с:

Клиент должен видеть уменьшенную версию изображения и иметь возможность выбрать его область для просмотра в режиме полного масштаба (100%).

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

однако ничто из этого не поможет вам достичь цели.

способ, которым я бы это сделал, заключался бы в предоставлении копии с водяным знаком 72dpi для использования при выборе области изображения для загрузки.вы могли бы масштабировать это значение до % от исходного, если бы проблема была с недвижимостью экрана.попросите пользователя выбрать верхние левые и нижние правые координаты.затем используйте что-то вроде imagemagick, чтобы скопировать эту область из оригинала для отправки пользователю.

если вам нужно сэкономить ресурсы, вы могли бы попросить пользователей загружать файлы из предопределенной сетки, поэтому при первом выборе сетки с координатами 14: 11, image_1411_crop.jpg записывается в файловую систему, и при следующем выборе этой координаты файл уже существует.

Редактировать: прочтите некоторые из ваших комментариев к другим ответам...

независимо от того, каким способом вы создаете кэширование на стороне сервера, вы будете использовать одинаковый объем пропускной способности и трафика.формат jpeg с разрешением 300 точек на дюйм - это формат jpeg с разрешением 300 точек на дюйм, независимо от того, был ли он только что сгенерирован или находится в файловой системе.

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

Я бы использовал S3 для хранения.Создайте две корзины (общедоступные, защищенные), укажите URL-адрес изображений защищенной корзины, как только вы разрешите пользователю их загружать.URL-адреса S3 можно сделать restful с указанием даты истечения срока действия.

Имея изображения размером 15 Мб, вы, вероятно, поймете, что вам нужно заранее сгенерировать масштабированную / обрезанную версию.

Я бы использовал какой-нибудь водяной знак на всех файлах, кроме исходного.(например, Google Maps)

[Править:Добавлен глубокий зум для масштабирования]

Посмотри на Silverlight Глубокий Зум для управления обрезкой и масштабированием (ДЕМОНСТРАЦИЯ).У них даже есть полезность чтобы сгенерировать все обрезанные изображения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top