如何上传KeystoneJS S3文件(How to upload S3 files in Keys

2019-10-23 05:51发布

我有一个项目叫做风格,有两个属性,一个具有原始CSS文本和其他它有一个S3File 。

Style.add({
  ...
  css: { type: Types.Code, language: 'css' },
  cssFile: {
    type: Types.S3File,
    s3path: 'uploads/assets',
  },
  ...
});

我想更新S3File用CSS文本的内容。

function uploadCSStoAmazon(style) {
  // Store css code in temporal file (with a md5 name)
  var rndm = crypto.randomBytes(20).toString('hex'), file_path = '/tmp/css_temp_' + rndm + '.css';

  fs.writeFile(file_path, style.css, function(err) {
    if(err) {
      return console.log(err);
    }

    console.log("The file was saved!");

    // style.cssFile = new Types.S3File();

    // TODO upload file to amazon
    style.cssFile._.uploadFile(file_path, true, function(err, fileData){
      // TODO erase css file
    });
  });

}

...

var aStyle = new Style.model({
  ...
  css: 'Some css string',
  ...
});


...

uploadCSStoAmazon(aStyle);

该cssFile属性未定义,我理解,但我怎么能创建一个新的文件,并将其分配给此属性,还上传的文件?

Answer 1:

我发现你可以如何使用随梯形的updateHandler。 他们还在使用req.files虽然形式的明示3.X。

 // A express file generator function writeToFile(fileName, txt, ext, callback) { var rndm = crypto.randomBytes(20).toString('hex'), file_path = '/tmp/css_temp_' + rndm + '.' + ext, the_file = {}; fs.writeFile(file_path, txt, function(err) { if(err) { callback(null, err); } var stats = fs.statSync(file_path); var fileSizeInBytes = stats["size"]; the_file.path = file_path; the_file.name = fileName + '.' + ext; the_file.type = 'text/' + ext; the_file.size = fileSizeInBytes; console.log("The file was cached!"); callback(the_file, err); }); } ... /** * Update Style by ID */ exports.update = function(req, res) { var data = (req.method == 'POST') ? req.body : req.query; Style.model.findById(data._id).exec(function(err, item) { if (err) return res.apiError('database error', err); if (!item) return res.apiError('not found'); writeToFile(item.slug, data.css, 'css', function(req_file, err){ if (err) return res.apiError('update error during file cache', err); req.files['cssFile_upload'] = req_file; item.getUpdateHandler(req).process(data, function(err) { if (err) return res.apiError('update error', err); res.apiResponse({ success: true }); }); // end process }); // end writeToFile }); }; 



文章来源: How to upload S3 files in KeystoneJS