我正在用Node.js構建一個Web應用程序,而且我正需要生成一個tar歸檔文件的PDF目錄。該應用程序在運行Ubuntu 14.04服務器的虛擬機上運行。我的代碼來執行此如下所示:Node.js - 用於tar文件的exec命令第一次正常工作,但在後續執行時會產生損壞的tar內容
function tarDirectory(path, token, callback) {
var exec = require('child_process').exec;
var cmd = 'cd ' + path + ' && tar -cvf genericName-' + token + '.tar' + ' ' + token;
exec(cmd, function(error, stdout, stderr) {
console.log(stdout);
console.log(stderr);
if (error) {
console.error(error);
}
if(callback) callback();
});
}
和這個tarDirectory函數被調用由以下代碼:
router.post('/files/generate', function(req, res, next) {
IDList = req.body['IDs[]'];
token = req.body['token'];
// if just a single file being generated
if (typeof req.body['IDs[]'] === "string"){
filehelper.generateFile(IDList[0], req.app.locals.site.basedir + "temp/", token);
}
// if multiple files being generated
else {
IDList.forEach(function(id) {
filehelper.generateFile(id, req.app.locals.site.basedir + "temp/", token);
});
}
filehelper.tarDirectory(req.app.locals.site.basedir + "temp/", token, res.end);
});
代碼預計包含動態數據的POST請求,其由按鈕點擊所產生在我的網絡應用程序中,然後將根據數據創建文件並將其打包到目錄中。這一切都很好,第一次。當我第一次點擊按鈕時,會產生焦油,當我打開它時,客戶端PDF與服務器上的PDF完全相同。然而,當我在一個小時左右再次點擊時,我收到一個tar文件,但是當我打開存檔並解壓它時,PDF全部被破壞,大約是預期字節大小的一半。我在這裏感到不知所措......我懷疑它可能與流處理不當有關,但我不確定。
這是生成PDF文件到一個目錄中,然後生成後柏油代碼:
function generateFile(id, path, token) {
var dirPath = path + token;
var filePath = path + token + "/file" + id + ".pdf";
console.log("creating file for: " + id);
try{
fs.statSync(dirPath).isDirectory();
} catch (err) {
fs.mkdirSync(dirPath);
}
// start the file pdf generation
file = new PDFDocument();
output = fs.createWriteStream(filePath);
output.on('close', function(){
return;
});
file.pipe(output);
// handle the intricacies of the file generation
file.text("file" + id + ".pdf");
// end the file
file.end();
}
1.是的,PDFs在服務器上的原始文件夾中是完整的,所以它們肯定是正確生成的。 2.我認爲這是正確的軌道...我會考慮使用承諾這一點。 3。謝謝你的例子:) – Kw3si
因此,在實現你對promise的建議之後,如果它一次只生成一個,我就能夠正確地生成PDF。調查......將返回給您 – Kw3si