A file / image / paste upload server with a focus on embedding. Written in Go You can use contented as a standalone upload server, or you can use the SDK to embed its upload widget into another website. [go-get]code.ivysaur.me/contented git https://git.ivysaur.me/code.ivysaur.me/contented.git[/go-get] =FEATURES= - Drag and drop upload - Multiple files upload - Pastebin upload - Custom drawing upload ([url=https://github.com/Leimi/drawingboard.js]via[/url]) - Ctrl-V upload - SDK-oriented design for embedding, including CORS support - Mobile friendly HTML interface - Preserves uploaded filename and content-type metadata - Hash verification (SHA512/256) - Detect duplicate upload content and reuse storage - Options to limit the upload filesize and the upload bandwidth - Short URLs (using [url=http://hashids.org]Hashids[/url] algorithm) - Image thumbnailing =USAGE (SERVER)= `Usage of contented: -data string Directory for stored content (default "") -db string Path for metadata database (default "contented.db") -diskFilesWorldReadable Save files as 0644 instead of 0600 -enableHomepage Enable homepage (disable for embedded use only) (default true) -listen string IP/Port to bind server (default "127.0.0.1:80") -max int Maximum size of uploaded files in MiB (set zero for unlimited) (default 8) -speed int Maximum upload speed in bytes/sec (set zero for unlimited) -title string Title used in web interface (default "contented") -trustXForwardedFor Trust X-Forwarded-For reverse proxy headers -concurrentthumbs Simultaneous thumbnail generation (default 16) ` If you are hosting behind a reverse proxy, remember to set its post body size parameter appropriately (e.g. `client_max_body_size` for nginx). =USAGE (HTTP)= The server responds on the following URLs: - `/get/{ID}`: Download item content - `/info/{ID}`: Get item content metadata (JSON) - `/thumb/{Type}/{ID}`: Get item thumbnail image - `/about`: Get server metadata (JSON) =USAGE (EMBEDDING FOR WEB)= Your webpage should load the SDK from the contented server, then call the `contented.init` function to display the upload widget over the top of an existing DOM element. Your callback will be passed an array of file IDs of any uploaded items. ` contented.init("#target", function(/* String[] */ items) {}); ` =CHANGELOG= NEXT: - Feature: Option to limit concurrent thumbnail generation - Enhancement: Set charset=UTF-8 when serving user-submitted text/plain content 2018-06-09: 1.2.1 - Feature: Add OpenGraph tags on preview pages, for rich metadata in chat applications - Update thumbnailing library to improve quality - Use dep for vendoring 2017-11-18: 1.2.0 - Feature: Thumbnail support - Feature: File preview page - Feature: Album mode (via URL `/p/{file1}-{file2}-...`) - Feature: New `-diskFilesWorldReadable` option to save files with `0644` mode 2017-10-15: 1.1.0 - Feature: Drawing mode - Feature: Ctrl+V image upload - Feature: Option to trust X-Forwarded-For headers when using a reverse proxy - Feature: Add `getDownloadURL`, `getInfoJSONURL`, `getPreviewURL` SDK methods - Feature: Option to disable uploading via the homepage - Feature: Add button to repeat when uploading from homepage - Enhancement: Automatically load library dependencies - Enhancement: Display homepage widget using the full screen size - Include drawingboard.js 0.4.6 (MIT license) - Fix a cosmetic issue with javascript console output - Fix a cosmetic issue with error messages if an upload failed 2017-10-08: 1.0.1 - Fix an issue with CORS preflight requests - Fix an issue with index URLs 2017-10-08: 1.0.0 - Initial public release - Include jQuery 1.12.4 (MIT license)