{"action":"created","issue":{"url":"https://api.github.com/repos/TryGhost/Ghost/issues/635","labels_url":"https://api.github.com/repos/TryGhost/Ghost/issues/635/labels{/name}","comments_url":"https://api.github.com/repos/TryGhost/Ghost/issues/635/comments","events_url":"https://api.github.com/repos/TryGhost/Ghost/issues/635/events","html_url":"https://github.com/TryGhost/Ghost/issues/635","id":19042918,"number":635,"title":"Server-side image upload refactor","user":{"login":"ErisDS","id":101513,"avatar_url":"https://avatars.githubusercontent.com/u/101513?v=3","gravatar_id":"","url":"https://api.github.com/users/ErisDS","html_url":"https://github.com/ErisDS","followers_url":"https://api.github.com/users/ErisDS/followers","following_url":"https://api.github.com/users/ErisDS/following{/other_user}","gists_url":"https://api.github.com/users/ErisDS/gists{/gist_id}","starred_url":"https://api.github.com/users/ErisDS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ErisDS/subscriptions","organizations_url":"https://api.github.com/users/ErisDS/orgs","repos_url":"https://api.github.com/users/ErisDS/repos","events_url":"https://api.github.com/users/ErisDS/events{/privacy}","received_events_url":"https://api.github.com/users/ErisDS/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/TryGhost/Ghost/labels/apps","name":"apps","color":"c7def8"}],"state":"closed","locked":false,"assignee":{"login":"ErisDS","id":101513,"avatar_url":"https://avatars.githubusercontent.com/u/101513?v=3","gravatar_id":"","url":"https://api.github.com/users/ErisDS","html_url":"https://github.com/ErisDS","followers_url":"https://api.github.com/users/ErisDS/followers","following_url":"https://api.github.com/users/ErisDS/following{/other_user}","gists_url":"https://api.github.com/users/ErisDS/gists{/gist_id}","starred_url":"https://api.github.com/users/ErisDS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ErisDS/subscriptions","organizations_url":"https://api.github.com/users/ErisDS/orgs","repos_url":"https://api.github.com/users/ErisDS/repos","events_url":"https://api.github.com/users/ErisDS/events{/privacy}","received_events_url":"https://api.github.com/users/ErisDS/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/TryGhost/Ghost/milestones/3","html_url":"https://github.com/TryGhost/Ghost/milestones/0.4","labels_url":"https://api.github.com/repos/TryGhost/Ghost/milestones/3/labels","id":336848,"number":3,"title":"0.4","description":"## Version 0.4.0 - Publishing improvements & architecture\r\n\r\n### Post public launch - December-ish\r\n\r\nSee [the roadmap](https://github.com/TryGhost/Ghost/wiki/Roadmap) for more info on what is in this milestone, and [the release procedure](https://github.com/TryGhost/Ghost/wiki/Git-workflow#release-procedure) for details of what the milestone date means.","creator":{"login":"JohnONolan","id":120485,"avatar_url":"https://avatars.githubusercontent.com/u/120485?v=3","gravatar_id":"","url":"https://api.github.com/users/JohnONolan","html_url":"https://github.com/JohnONolan","followers_url":"https://api.github.com/users/JohnONolan/followers","following_url":"https://api.github.com/users/JohnONolan/following{/other_user}","gists_url":"https://api.github.com/users/JohnONolan/gists{/gist_id}","starred_url":"https://api.github.com/users/JohnONolan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JohnONolan/subscriptions","organizations_url":"https://api.github.com/users/JohnONolan/orgs","repos_url":"https://api.github.com/users/JohnONolan/repos","events_url":"https://api.github.com/users/JohnONolan/events{/privacy}","received_events_url":"https://api.github.com/users/JohnONolan/received_events","type":"User","site_admin":false},"open_issues":0,"closed_issues":176,"state":"closed","created_at":"2013-05-19T14:05:43Z","updated_at":"2014-01-29T22:20:37Z","due_on":"2013-12-09T08:00:00Z","closed_at":"2014-01-13T09:53:22Z"},"comments":17,"created_at":"2013-09-05T13:20:07Z","updated_at":"2015-07-14T17:42:04Z","closed_at":"2013-11-12T16:30:06Z","body":"At the moment, Ghost image uploads are thrown straight at the local file system. This is great and exactly what we want for standard Ghost - no config of an external system required.\r\n\r\nHowever, it does pose a problem for hosting. Most node hosting platforms do not persist the local file system, and this will be true for our own platform.\r\n\r\nThe server-side part of accepting and handling uploads, along with the retrieval of images needs to be refactored such that the local file system handler is a module and is the 'default' image upload handler.\r\n\r\nThe handler should support upload/post requests, retrieve/get requests, and delete requests, but not modify. The handler should store the files in an immutable fashion, using a unique filename (closing #619). \r\n\r\nGhost should then be wired up in such a way that if another handler is configured it will use that, but otherwise it will use the local file system handler by default for all requests to store or retrieve an image (there's no concept of delete in the UI yet).\r\n\r\nWe will also need to implement a different file upload handler, but the details of what it should do, and whether or not it should be core or a plugin are not yet confirmed."},"comment":{"url":"https://api.github.com/repos/TryGhost/Ghost/issues/comments/121319300","html_url":"https://github.com/TryGhost/Ghost/issues/635#issuecomment-121319300","issue_url":"https://api.github.com/repos/TryGhost/Ghost/issues/635","id":121319300,"user":{"login":"bioball","id":4590460,"avatar_url":"https://avatars.githubusercontent.com/u/4590460?v=3","gravatar_id":"","url":"https://api.github.com/users/bioball","html_url":"https://github.com/bioball","followers_url":"https://api.github.com/users/bioball/followers","following_url":"https://api.github.com/users/bioball/following{/other_user}","gists_url":"https://api.github.com/users/bioball/gists{/gist_id}","starred_url":"https://api.github.com/users/bioball/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bioball/subscriptions","organizations_url":"https://api.github.com/users/bioball/orgs","repos_url":"https://api.github.com/users/bioball/repos","events_url":"https://api.github.com/users/bioball/events{/privacy}","received_events_url":"https://api.github.com/users/bioball/received_events","type":"User","site_admin":false},"created_at":"2015-07-14T17:42:04Z","updated_at":"2015-07-14T17:42:04Z","body":"Ah great, thanks!"}}