Использовать содержимое файла без сохранения файла с помощью express.js? - PullRequest
0 голосов
/ 07 июня 2018

Я пишу приложение, в котором у меня есть загрузка файла CVS.У меня есть синтаксический анализатор CVS, поэтому я могу загрузить CSV в бэкэнд, обработать его и сохранить в базе данных.После этого я удаляю файл.

Я использую multer для принятия файла, и он сохраняется на жестком диске, затем я могу прочитать файл, использовать его содержимое и удалить файл.Все хорошо и все хорошо там.

Я пытаюсь выяснить, есть ли способ вообще пропустить сохранение файла.Есть ли простой способ отправить файл из 'multipart/form-data' формы и прочитать содержимое напрямую с помощью Express без необходимости сохранять его в файловой системе?

Просто для справки, это то, что у меня сейчас есть, и этоработает должным образомтогда у меня есть это:

export default function (filePath) {
  let content = fs.readFileSync(filePath, 'binary');  
  fs.unlink(filePath, () => {});

  // do nasty stuff to content and save it gently in the database
}

Итак, еще раз, есть ли способ сделать это, не прибегая к сохранению CSV в файловую систему, прежде чем я смогу использовать содержимое файла?

Возможно ли это даже с учетом кодировки файлов и т. Д., Может быть, нет никакого способа обойти использование fs?

Ответы [ 2 ]

0 голосов
/ 11 августа 2018

Это то, что можно сделать, если вы не хотите сохранять CSV в файловой системе и читать содержимое.В моем случае мне пришлось передать содержимое csv-файла в виде строки на другой сервер (без сохранения в локальной системе сервера).

const multer = require('multer');
const upload = multer({ storage: multer.memoryStorage() })

app.post(
        '/users/bulkUpload',
        upload.single('csvFile'),
        this.usersRoutes.uploadUserData
 );

и в uploadUserData():

uploadUserData = async(
    req: Request,
    res: Response,
    next: any
): Promise<any> => {
    try {
        const options = {
                formData : {
                    'upload': String(req.file.buffer)
                },
                headers: {
                    authorization: req.token,
                    'Content-type': 'multipart/form-data'
                },
                json: true
        };
        const response = await this.http.post.exec(
                '/somePostUrl/',
                options
        );
        return res.status(200).json(response.body);
    }catch (error) {
        return next(error);
    }
}

Здесь console.log(String(req.file.buffer)) покажет вам содержимое файла csv в виде строки.

Надеюсь, это поможет вам.

0 голосов
/ 07 июня 2018

С библиотекой multer вы можете хранить загруженный в память файл и использовать его в качестве буфера.В файле Readme проекта вы можете найти документацию: github.com/expressjs/multer#memorystorage

...