Skip to content

sea5kg/BottleFS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BottleFS

Bottle File System Status: uncompleted!

How to Build:

$ cd bottlefs
$ gradle build

Description: Multithread web-server:

  • upload files to server by url
  • download files from server by id
  • remove files from server by id
  • search by content

Language: java-1.7 or java-1.8

Using Libraries:

Architech: HTTP-WEB-SERVER (api)

API. will be has methods:

http://localhost:8086/upload input parameters:

  • filename - type string
  • file - type bytearray
  • metadata - type bytearray (json), it's data for description this file or input parameters:
  • file-http - link to http file
  • metadata - type bytearray (json), it's data for description this file output parameters:
  • fileid - type string
  • filetext - converted file to textfile (used tika)

http://localhost:8086/download input parameters:

  • fileid - type string output parameters:
  • file - bytearray (use tika)

http://localhost:8086/search input parameters:

  • query - type string
  • format - type string: json, xml (default: json) output parameters:
  • list - list of fileid and filename
  • count - count of result search (not more than 10 or 50 or 100)

http://localhost:8086/start-reindexing input parameters:

  • none output parameters:
  • status remark: only from localhost and only one process!!!

http://localhost:8086/stop-reindexing input parameters:

  • none output parameters:
  • status

http://localhost:8086/help retrun some information (version list of functions and another)

How it must be work:

  • Загрузка файла будет происходить через POST запрос. проверяется токен fileid: вычисляется по md5 (или sha-1) от содержимого файла (или может вообще что то нелепое генерим хбз пока) далее содержимое файла складывается по правилу 255 или 65536, что бы файловая система не охренела от количества файлов (если файл существует то бэкапим его в отдельную диреткорию и записываем новый) рядом складывается xml файл в котором записывается информация: fileid, filename, filetext далее этот xml отправляется на индексирование в lucene фича: а можно еще попробовать сгенерить иконку!

  • выгрузка файлов на входе hash от файла по нему генерим месторасположение файла ищем его если не нашли то говорим тю-тю файла если нашли то отдаем bytearray фича: храним файлы запакованные (для лучшего сжатия) а при отдаче распаковываем сперва их а потом уже возвращаем

  • search in files

Example request: http://localhost:8086/bottle1/search-file?query=hello&page=2&format=json

Example response: { 'count' : '3' 'result' : [ { 'fileid' : '0842e519a5240a8ed129454eb4115494', 'filename' : 'ТЗ.doc', 'metadata' : { 'someid': '123' } } { 'fileid' : 'a681902e65722c790df8bd891cdc0eab', 'filename' : 'ТЗ.doc' } { 'fileid' : '0b64b7b250a0a284c57fe39d9178cd60', 'filename' : 'ТЗ1.doc' } ] }

  • start reindexing clean index (remove all indexes files) на все запросы по поиску файлов и по из загрузке отвечаем что заняты переиндексированием. по выгрузке файлов тут все норм и спокойненько их отдаем. далее после очистки индекса начинаем рекурсивно проходить по заранее заготовленным xml

  • защита от нежелательных загрузок и поисков по файлам (типа только доверенным лицам можно) при старте сервиса делается запрос доверенному серверу что "я такой то и такой стою и работаю" на что доверенный сервис должен ответить "ок вот тебе мой индентификатор и только на него ты отвечай всех остальный посылай нахуй" сервис запоминает его и при запросе поиска и загрузки файлов использует его для идентификации также процедуру получения нового идентификатора лучше сделать переодически (5 минут например или 1 час)

Configuration and run: web server: java -jar /usr/bin/bottlefs-all.jar /etc/bottlefs/config.d/

также для простоты можно создать deb-пакет и/или init.d скрипты (или что там в почете)

что бы перевезти и запустить сервер на другой тачке:

  • установить сервис на тачку
  • перенести файлы конфигурации,
  • перенести файлы из хранилища
  • перенести файлы индекса или запустить полное переиндексирование и вуаля сервис уже на другой тачке

bottle2.properties:

base

name=bottle2 port=8086

trusted ip-servers

trusted.ip=127.0.0.1 trusted.ip=89.76.1.245

config for file-storage and index

files.index.path=tmp/bottlefs-02-index files.path=data/bottlefs-02-files

config for metadata

metadata.textfields=someid,someid2,someid3

About

Bottle File System

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published