#node.js #rest
#node.js #rest
Вопрос:
Здесь у меня есть некоторые ресурсы о том, как создать REST API узла, который загружает изображение с заданного URL, проблема, с которой я сталкиваюсь, заключается в том, что когда я загружаю новое изображение, оно удаляет предыдущее и заменяет его. Я хочу, чтобы все загруженные изображения сохранялись в созданной папке, вот что у меня есть:
const express = require('express');
const app = express()
const logger = require('morgan')
const bodyParser= require('body-parser')
const Fs = require ('fs');
const Path = require ('path');
const mongoose = require('mongoose');
const DB = require('./config/keys').MONGO_URI
const Pictures = require('./model/pictureSchema');
const Axios = require ('axios');
const port = process.env.PORT || 4000;
app.post('/download',async(req,res)=> {
const {img} = req.body
// console.log(req.body)
const url = img
const path = Path.join(__dirname, 'files', 'model.jpg')
const response = await Axios({
method: 'GET',
url: url,
responseType: 'stream'
})
response.data.pipe(Fs.createWriteStream(path))
return new Promise ((resolve, reject) => {
response.data.on('end', ()=>{
resolve()
})
response.data.on('error', err =>{
reject(err)
})
})
})
Исправлено с помощью @tadman:
вот отредактированный код, надеюсь, он поможет кому-то еще
app.post('/download',async(req, res)=> {
const {img} =req.body
regex = new RegExp('[^.]
Комментарии:
1. Пожалуйста, полегче со ВСЕМИ ЗАГЛАВНЫМИ буквами, особенно в заголовках.
2. Заменяется ли оно, потому что у вас есть фиксированный путь для всех загрузок? Возможно, вам нужно сделать это динамичным. Вы даже можете сгенерировать его, например, UUID или что-то в этом роде.
3. Спасибо, это действительно сработало, возникла небольшая проблема с динамическим получением расширения файла, но регулярное выражение помогло с этим
)
extension = img.match(regex);
// console.log(req.body)
// console.log(extension)
if(!img){
res.json({
message: 'please input a file link'
})
}
else{
const url = img
const path = Path.resolve(__dirname, 'files', `${uuidv4()}.${extension}`)
const response = await Axios({
method: 'GET',
url: url,
responseType: 'stream'
})
response.data.pipe(Fs.createWriteStream(path))
return new Promise ((resolve, reject) => {
response.data.on('end', ()=>{
resolve()
res.status(200).json({
message:'File download successfull'
})
})
response.data.on('error', err =>{
reject(err)
res.status(400).json({
message:'File download failed'
})
})
})
}
})
Комментарии:
1. Пожалуйста, полегче со ВСЕМИ ЗАГЛАВНЫМИ буквами, особенно в заголовках.
2. Заменяется ли оно, потому что у вас есть фиксированный путь для всех загрузок? Возможно, вам нужно сделать это динамичным. Вы даже можете сгенерировать его, например, UUID или что-то в этом роде.
3. Спасибо, это действительно сработало, возникла небольшая проблема с динамическим получением расширения файла, но регулярное выражение помогло с этим