# contented [![](doc/image1.thumb.png)](doc/image1.png) A file / image / paste upload server with a focus on embedding. You can use contented as a standalone upload server, or you can use the SDK to embed its upload widget into another website. ## Features - Drag and drop upload - Multiple files upload - Pastebin upload - Custom drawing upload ([via drawingboard.js](https://github.com/Leimi/drawingboard.js)) - 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 [Hashids](http://hashids.org) 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: URL |Method |Description ---------------------|-------|-- `/get/{ID}` |`GET` |Download item content `/info/{ID}` |`GET` |Get item content metadata (JSON) `/thumb/{Type}/{ID}` |`GET` |Get item thumbnail image `/about` |`GET` |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. ```html 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)