我正在编写节点js代码,以将图片从Raspberry Pi上传到我的Google云端硬盘
我尝试上传在同一文件夹中生成的图像文件。 Node js似乎忽略了该文件。尽管该文件存在,但始终返回ENOENT。我已经手动验证了文件的存在。路径和文件名正确。我还通过将文件名打印到控制台进行了验证,它似乎匹配。
var fileName1 = Date.now();
const path = require('path');
const fs1 = require('fs');
var fN = fileName1+".jpg";
console.log("Only filename : "+fN);
const finalPath = path.join(__dirname, fN);
console.log("Final filename : "+finalPath);
var media = {
mimeType: 'image/jpeg',
//PATH OF THE FILE FROM YOUR COMPUTER
body: fs1.createReadStream(finalPath)
};
输出
Only filename : 1571724785329.jpg
Final filename : /home/pi/nodecode/1571724785329.jpg
events.js:174
throw er; // Unhandled 'error' event
^
Error: ENOENT: no such file or directory,open
'/home/pi/nodecode/1571724785329.jpg'
答案 0 :(得分:1)
非常感谢每个人分享他们的观点,并尝试为我找出答案。我发现了问题。在nodejs试图查找文件的那一瞬间,该文件尚未创建。文件创建和上传是并行进行的。所以我用python代替了nodejs。
答案 1 :(得分:0)
您的代码似乎对我有用。我看到的唯一问题是创建文件名的方式。无论以前如何生成,文件名都不会与Date.Now()相同。
因此,代码执行的顺序是造成问题的唯一可能原因。例如,当执行用于创建读取流的代码时,尚未创建您希望在可读流中加载的文件。
尝试
调试代码执行顺序,找出是在执行这段代码之前还是之后创建文件fs1.createReadStream(finalPath)
var fileName1 = "wf";
const path = require('path');
const fs1 = require('fs');
var fN = fileName1 + ".jpg";
console.log("Only filename : " + fN);
const finalPath = path.join(__dirname, fN);
console.log("Final filename : " + finalPath);
var media = {
mimeType: 'image/jpeg',
//PATH OF THE FILE FROM YOUR COMPUTER
body: fs1.createReadStream(finalPath)
};
console.log(media);
我得到的输出。
Only filename : wf.jpg
Final filename : D:\dir1\dir2\myproject\wf.jpg
{ mimeType: 'image/jpeg',
body:
ReadStream {
_readableState:
ReadableState {
objectMode: false,
highWaterMark: 65536,
buffer: BufferList { head: null, tail: null, length: 0 },
length: 0,
pipes: null,
pipesCount: 0,
mode: 438,
start: undefined,
end: Infinity,
autoClose: true,
pos: undefined,
bytesRead: 0,
closed: false } }