2015-07-11 1 views
0

Это своего рода основная вещь для хранения файла, как кажется, но я наткнулся на определенную проблему. Вот что я понял о хранении файлов на сервере при программировании в JAVA.Как хранить файл и ссылаться на него в веб-приложении java?

  1. Вы не можете хранить файлы в mysql, так как если файл тяжелый, то не рекомендуется. Поэтому я решил не делать этого.

  2. Также не рекомендуется хранить файлы в контейнерах, таких как Tomcat или Wildfly, может быть из-за того, что он должен быть развернут и что-то в этом роде?

  3. Вы можете определенно сохранить файл, файловый сервер Apache? Я в замешательстве. Можем ли мы это сделать и хранить здесь файлы, ссылаться на базу данных? Это похоже на то, как сайты хранят свои изображения или файлы?

  4. Я также столкнулся с некоторыми базами данных, такими как NoSql, но я не слишком углублялся, думая, что это может быть неправильно в конце, и я бы потратил свое время на другие вещи.

Сказать, что такое хороший способ хранения файла на сервере, ссылаться на него на веб-приложение JAVA и записывать его в базу данных?

+0

Является ли файл частью развертывания? Или это генерируется сервером? Или загружено? – luksch

+0

позволяет сказать, что это загруженный файл, и я хочу сохранить его на файловом сервере, чтобы использовать его позже. – Rockink

+0

Пункт 3: Ссылка на базу данных Вопрос: ссылку на веб-приложение Java и запись его в базу данных Не могли бы вы объяснить, что именно хранится в базе данных здесь? – prabugp

ответ

1

Обычно мы не помещаем наши файлы в базу данных (NoSQL или RDBMS), потому что они не являются файловыми системами. Если кто-то загружает файл, вы храните его в файловой системе и, возможно, записываете имя и другие метаданные в db для дальнейшего использования. Вы можете технически помещать содержимое файла в базу данных, и оно имеет свои достоинства и недостатки - https://softwareengineering.stackexchange.com/a/150787/156860

Загруженные файлы не рекомендуется размещать на веб-серверах/серверах приложений, поскольку для работы с нагрузкой может потребоваться более одного сервера и если вы поместите свой файл только на один сервер, другой сервер может столкнуться с проблемами при доступе к контенту. И если один сервер опускается, файлы на этом сервере недоступны для использования другими серверами. Вероятно, вам понадобится общий диск/диск, к которому все серверы могут подключиться и прочитать файл.

JavaEE обрабатывает это путем предоставления адаптера ресурсов, который абстрагирует, как приложение взаимодействует с «ресурсами» в целом (может быть файл или какой-либо другой ресурс). Но, не имея более подробных сведений о том, какие файлы, насколько они важны и как они используются, будет сложно найти решение для этого вопроса.

0

Это действительно зависит от вашего прецедента. Если вы дадите больше информации о том, что вы пытаетесь решить, вы должны получить лучшие ответы.

Я считаю, что в целом облачные решения, такие как Amazon's S3, очень распространены, хороши и просты в работе с этими днями. Вы также получаете преимущества своих серверов, которые не обязательно должны обслуживать сами файлы, что означает большую пропускную способность для запросов, не связанных с файлами.

Вы не можете хранить файлы в mysql, так как если файл тяжелый, это не рекомендуется. Поэтому я решил не делать этого.

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

Также не рекомендуется хранить файлы в контейнерах, таких как Tomcat или Wildfly, может быть из-за того, что его нужно развернуть и что-то в этом роде?

Не совсем уверен, что вы подразумеваете под контейнерами «в», вы имеете в виду в своем военном файле? Или в локальной файловой системе? Обычно это не рекомендуется, но опять же, это действительно зависит от трафика, размеров файлов и т. Д. Локальная файловая система может работать, но вы должны использовать что-то вроде NFS, поэтому, если сервер идет вниз, файлы не идут с ним.

Я видел, как люди используют локальную файловую систему и git для хранения текстовых файлов, которые сохраняются через сервер. Это дало им избыточность и версии.

Возможно, вы сохранили файл, файловый сервер Apache? Я в замешательстве. Можем ли мы это сделать и хранить здесь файлы, ссылаться на базу данных? Это похоже на то, как сайты хранят свои изображения или файлы?

Я никогда не использовал Apache File Server, но что вас смущает? Проделав простой Google, похоже, что это просто сервер Apache, что означает, что вы делаете HTTP-запросы для хранения и извлечения файлов. Это будет похоже на то, как работает S3, и поэтому я бы сказал, что это, вероятно, хорошее общее решение.

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

Фактическое решение NoSql, которое вы выбрали, будет иметь свои собственные требования, поэтому я не могу говорить о том, насколько хорошо будет решение, но опять же, это действительно зависит от вашего трафика и размеров файлов. Решения NoSql, которые я использовал, имеют интерфейсы HTTP, поэтому работа с ними не будет отличаться от Apache или S3. Самое большое различие заключается в том, что вы должны запрашивать файлы, подобные тому, который вы делали бы из базы данных в решении NoSql, но эти запросы обычно отправляются через HTTP так, а не совсем разные.