Отправка файлов туда и обратно с nodejs - PullRequest
0 голосов
/ 17 апреля 2020

Я спрашивал и искал это в нескольких местах, но не смог найти ответа. Итак, у меня есть сервер express, который реализует методологии Rest. Мои клиенты могут отправлять и получать свои данные и все, но я хочу, чтобы они также могли отправлять файлы, и сервер должен отправлять файл обратно клиенту по требованию. С JavaScript я могу использовать formData, но я хочу знать или изучать правильный способ сделать это. Одним из них является строка base64. Может ли кто-нибудь предоставить мне простой пример пересылки файлов туда и обратно в среде отдыха? Или привести меня к этому? Спасибо

1 Ответ

1 голос
/ 17 апреля 2020

о том, как отправить запрос REST, я говорю, что у нас нет запроса REST, REST - это просто конструкция, которая принимает запросы get, post, put, del. так что вы работаете так же, как и без RESTful design

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

сначала определите помощника загрузки, используя multer:

const multer = require('multer');
const mkdirp = require('mkdirp');
const fs = require('fs');

const getDirImage = () => {
    let year = new Date().getFullYear();
    let month = new Date().getMonth() + 1;
    let day = new Date().getDay();
    return `${config.homedir}/public_html/uploads/images/${year}/${month}/${day}`;
};
const ImageStorage = multer.diskStorage({
    destination: (req, file, cb) => {
        let dir;
        if (file.mimetype === 'text/css') {
            dir = getDirCss();
        } else {
            dir = getDirImage();
        }
        mkdirp(dir, (err) => cb(null, dir))
    },
    filename: (req, file, cb) => {
        let filePath;
        if (file.mimetype === 'text/css') {
            filePath = getDirCss() + '/' + file.originalname;
        } else {
            filePath = getDirImage() + '/' + file.originalname;
        }

        if (!fs.existsSync(filePath))
            cb(null, file.originalname);
        else
            cb(null, Date.now() + '-' + file.originalname);

    }
});
const uploadImage = multer({
    storage: ImageStorage,
    limits: {
        fileSize: 1024 * 1024 * 10
    }
});
module.exports = uploadImage;

в вашем файле маршрута:

const upload = require('path/to/upload/helper');
router.post('/imageUpload', upload.single('image'), imageValidator.handle(), imageController.update);

, затем вы можете получить доступ к загруженному файлу в req.file

о возврате iamge обратно пользователю вы можете вернуть его URL в папку загрузки, чтобы он мог его получить; но для этого вам нужно подать файлы stati c:

app.use(express.static('your_upload_dir'));

, теперь вы можете получить доступ к файлам stati c:

your_url/file's_location

или: localhost:your_app_port/file's location

если вы тестируете на localhost

, если вы хотите ограничить доступ к этим файлам, вы можете использовать промежуточное ПО для проверки токена пользователя или IP-адреса или чего-то еще. трудной частью было бы создание модели для хранения имени файла и URL-адреса, а также маршрут для запроса файлов по их имени.

...