Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何检测图像何时保存在服务器上?_Node.js - Fatal编程技术网

Node.js 如何检测图像何时保存在服务器上?

Node.js 如何检测图像何时保存在服务器上?,node.js,Node.js,基本上,我已经完成了将图像上传到服务器(文件)的过程,当我想保存图像时,我想使用名为imagemin的库来压缩图像大小,但似乎当我使用此库时,图像不可用,或者它还没有完成在文件夹中的保存 我试着压缩一个已经在同一个目录中的图像,它可以完美地压缩它,所以我几乎可以肯定问题发生了,因为图像还没有完全保存 我怎样才能解决这个问题 let saveImage = (file) => { return new Promise((resolve, reject) => { let

基本上,我已经完成了将图像上传到服务器(
文件
)的过程,当我想保存图像时,我想使用名为
imagemin
的库来压缩图像大小,但似乎当我使用此库时,图像不可用,或者它还没有完成在文件夹中的保存

我试着压缩一个已经在同一个目录中的图像,它可以完美地压缩它,所以我几乎可以肯定问题发生了,因为图像还没有完全保存

我怎样才能解决这个问题

let saveImage = (file) => {


 return new Promise((resolve, reject) => {

    let folder=__dirname + "/../gallery/";
    let name_file="my_image.png";
    file.mv(`${folder}${name_file}`, (err) => {

        (async () => {

        //at this moment my image is not avalaible
        const files =  imagemin([`${folder}${name_file}`], {
            destination:folder,
            plugins: [
            imageminPngquant({
                quality: [0.5, 0.6],
            }),
            ],
        });
        console.log(files); //output is []
        })();
        resolve({ ok: true});
    });
 })
}



app.post("/upload_photo", [], async function (req, res) {
    my_file = await saveImage(req.files.my_file);
    if(my_file.ok){
      return res.json({
       ok: true,
       message: "success!",
      });
    }

  });
我假设一个完美的场景,在这个场景中我不会有错误,然后我将进行相应的验证。
注意:
err
始终为空,因此我没有错误。

这是异步操作。你需要等待,直到它完成之前,解决你的承诺

        const files = /* needs*/ await /*here*/  imagemin([`${folder}${name_file}`], {
            destination:folder,
            plugins: [
            imageminPngquant({
                quality: [0.5, 0.6],
            }),
            ],
        });
这项工作:

const fs = require('fs');
const imagemin = require('imagemin');
const imageminPngquant = require('imagemin-pngquant');

let saveImage = async (file) => {
  return new Promise((resolve, reject) => {
    let folder = __dirname + '/gallery/';
    let name_file = 'my_image-' + Date.now() + '.png';
    fs.rename(file, `${folder}${name_file}`, (err) => {
      //at this moment my image is not avalaible
      (async () => {
        const files = await imagemin([`${folder}${name_file}`], {
          destination: folder,
          plugins: [
            imageminPngquant({
              quality: [0.5, 0.6],
            }),
          ],
        });
        console.log(files); //output is []
      })();
      resolve({ ok: true });
    });
  });
};

(async () => {
  my_file = await saveImage('./screenshot.png');
  if (my_file.ok) {
    console.log('Success');
  }
})();

什么是
文件
?在调用此函数之前,问题很明显。您能分享HTTP请求处理程序的完整代码吗?为什么您不能先压缩图像,然后存储到文件夹中?@HagaiHarari我更新了我的代码ImageMin是异步的,请等待它,解析前的封装也是异步的->等待它这无法工作语法错误,bakets和Wait需要异步它现在工作了吗?除了应用程序未定义之外,没有任何错误,因为我没有实现它。在console.log(文件)之后,调用了一个函数,但它没有开始->
(async()=>{
缺失;)我再次编辑了它,现在它可以工作了。对它进行了一些修改,以便能够测试它。顺便说一下:你必须手动创建gallery文件夹。我没有这些问题-我只是懒得回答;),作者的名字是
yavg