【问题标题】:Using fs.writeFile to download an image and upload it to twitter [duplicate]使用 fs.writeFile 下载图像并将其上传到 twitter [重复]
【发布时间】:2017-10-23 01:21:48
【问题描述】:

我正在尝试下载图像,然后将图像上传到 Twitter。当我尝试下载图像时,它在应用程序完成之前不会下载,这意味着我无法将其上传到 Twitter。

我相信 node.js 是异步的,所以这是导致问题的原因。任何建议都会很棒。

下面是我的下载功能。

// downloads the image
function download(url){
        var request = require('request'), 
            fs      = require('fs'),
            url     = url;
        count = count + 1; 
        request(url, {encoding: 'binary'}, function(error, response, body) {

         fs.writeFile('downloaded'+ count + '.jpg', body, 'binary', function (err) {

          });

        });


    }

我尝试过使用 writeFileSync,但这似乎不起作用。

【问题讨论】:

  • 我看到了将文件下载到本地硬盘的代码。将其上传到其他地方的代码在哪里?你必须把它放在你的 fs.writeFile() 完成处理程序中。仅供参考,您还可以使用流从一个输入管道传输到另一个输出。在这种情况下非常有用。
  • 谢谢,是的,该功能将图像存储在我本地硬盘的主文件夹中。我会调查溪流。谢谢
  • 如果您向我们展示上传代码,我们可以帮助您处理流部分。

标签: node.js fs


【解决方案1】:

更新 如果您想一步完成下载和上传,请查看this answer

原答案

查看this answer 进行上传。

试试这个(下载):

var fs = require('fs'),
    request = require('request');

request({uri: url})
      .pipe(fs.createWriteStream(path))
      .on('close', function() {
        // done
      });

取自here

如果您愿意,您实际上应该能够在使用流下载时跳过驱动器并上传它。

我建议您在异步操作中使用 Promise。它们使编写异步代码变得轻而易举,并且看起来比回调更干净。使用带有 async/await 语法的 Promise 会更好(现在 Node 8 原生支持)。

这是promises and async/await 的速成课程。我相信您可以通过谷歌搜索了解更多信息。

【讨论】:

  • 这不会下载和上传问题所要求的。 OP 的代码已经正确下载。
  • 我已经链接到了一个用于上传的 stackoverflow 答案。重复没有意义。只需将两者混合即可。
  • 这里的理想答案是通过管道从下载直接上传,而无需干预本地保存。这不在您的答案或您引用的答案中。这就是这个问题的真正意义所在。如果 OP 向我们展示他们的上传代码,我们都可以以更具体的方式提供帮助,而不是通用的答案。
  • 我添加了一个更新,其中包含指向另一个 SO 线程的链接,该线程可以一次性下载/上传。有时人们只需要谷歌一下。
  • 这是一个更好的参考,恰好是一个很好的问题/答案,可以将此问题标记为重复。正如你所说,在这里重复没有意义,这是堆栈溢出方式(标记重复而不是重复)。
猜你喜欢
  • 2023-03-27
  • 1970-01-01
  • 2012-06-28
  • 2015-01-10
  • 2017-12-07
  • 2016-09-09
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
相关资源
最近更新 更多