Simple image host.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

image_create.node.js 1.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. var fs = require("fs");
  2. module.exports = function(ctx) {
  3. ctx.getPostData(function(err, data, files) {
  4. if (err)
  5. return ctx.fail(err);
  6. if (!files.file)
  7. return ctx.fail("No file supplied.");
  8. data.collectionId = parseInt(data.collectionId);
  9. if (data.lastCollectionId !== ctx.session.collectionId)
  10. return ctx.fail("You don't own that collection.");
  11. //We want all extensions to be lower case.
  12. data.extension = data.extension.toLowerCase();
  13. ctx.db.query(
  14. "INSERT INTO images (name, description, extension, collection_id) "+
  15. "VALUES ($1, $2, $3, $4) "+
  16. "RETURNING id, collection_id",
  17. [data.name, data.description, data.extension, data.collectionId],
  18. queryCallback
  19. );
  20. });
  21. function queryCallback(err, res) {
  22. if (err)
  23. return ctx.fail(err);
  24. var id = res.rows[0].id;
  25. var collectionId = res.rows[0].collection_id;
  26. var file = ctx.postData.files.file;
  27. var readStream = fs.createReadStream(file.path);
  28. var writeStream = fs.createWriteStream(
  29. ctx.conf.dir.imgs+"/"+
  30. collectionId+"/"+
  31. id
  32. );
  33. readStream.pipe(writeStream);
  34. readStream.on("end", function() {
  35. ctx.succeed({
  36. id: id
  37. });
  38. });
  39. }
  40. }