【问题标题】:Merge 2 log files in nodejs在nodejs中合并2个日志文件
【发布时间】:2020-10-28 15:36:56
【问题描述】:

我有一个文件保存在我的服务器中,假设它的路径是data/x.log。我将一个新文件上传到服务器:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';

import { IResponse } from 'src/app/interfaces/response.interface';
import { environment } from 'src/environments/environment';

const ENDPOINT = environment.apiUrl + '/log';

@Injectable()
export class HttpUploadService {
    constructor(
        private http: HttpClient,
    ) { }

    public uploadLogFile(file: File): Observable<IResponse> {
        const baseUrl: string = ENDPOINT;
        
        const postData = new FormData();
        postData.append('file', file);

        return this.http.post<IResponse>(baseUrl, { postData });
    }

}

这也是一个日志文件。我的命令是将这两个文件合并到同一位置data/x.log 路径。 合并就像追加。只需在第一个文件之后添加第二个文件内容即可。

如何使用 node.js 完成我的服务器代码?

这是我的控制器:

const saveLogFile = async (req, res) => {
}

在我的第一种方法中,我尝试使用 multer 包:

const storage = multer.diskStorage({
    destination(req, file, cb) {
        cb(null, './data');
    },
    filename(req, file, cb) {
        cb(null, `x.log`);
    }
});

但据我所知,它只会覆盖文件内容而不会合并。

我该怎么做?

【问题讨论】:

    标签: node.js angular multer


    【解决方案1】:

    我还没有听说过支持追加的上传库。您很可能必须手动执行此操作,而不使用自动将文件存储在磁盘上的库。

    例如,您可以使用 busboy 以流的形式访问传入文件,然后将其附加到所需的文件中。获得传入流后,您可以使用以下内容附加到现有文件:

    const fs = require("fs");    
    const destination = fs.createWriteStream("data/x.log", {
      flags: "a" // "a" for append
    });
    incomingFile.pipe(destination);
    

    【讨论】:

      猜你喜欢
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      相关资源
      最近更新 更多