невозможно отобразить изображение из статической папки в узле js - PullRequest
0 голосов
/ 09 июня 2018

Новичок в Node.js и пытается отобразить изображение из статической папки, используя

http://localhost:3000/uploads/animal.jpg

, но я не могу отобразить его и получает ошибку Cannot GET /uploads/C6MGiE-1528523813517.jpg, и когда я зарегистрировался в uploads папка.Изображение было успешно загружено.Изображения загружаются через Postman

app.ts

import cors from "cors";
import express from "express";
import mongoose from "mongoose";
import path from "path";
import mediaUploadRoute from "./routes/media-upload.route";

app.use('/api/uploads', mediaUploadRoute);

const app = express();
app.use(express.json());
app.use(cors());

const directory: string = path.join(__dirname, '/uploads/')
app.use(express.static(directory))

media-upload.route.ts

import express from "express";

// mediaFiles is a service that uses multer to host the images to the server
import mediaFiles from "../services/media-files";

const router = express.Router();

router.post('/fileInput_icon', mediaFiles.uploadSingle('fileInput_icon'), (req, res) => {
    let file = req.file;
    file.path = file.path.replace(/\\/g, "/")
    res.status(200).send(JSON.stringify(file.path));
})

router.post('/fileInput_image', mediaFiles.uploadSingle('fileInput_image'), (req, res) => {
    let file = req.file;
    file.path = file.path.replace(/\\/g, "/")
    res.status(200).send(JSON.stringify(file.path));
})

export default router;

В чем причина?Я работаю много дней, но безуспешно

Обновление

app.js

// it created public folder in the root of project directory
app.use(express.static('/public'));

in multer

private storage = multer.diskStorage({
        destination: 'public',
        filename: function (req, file, callback) {
            callback(
                null,
                file.originalname.replace(/\.[^/.]+$/, "") + '-' + Date.now() + path.extname(file.originalname))
        }
    })

пытался получить доступ через

http://localhost:3000/C6MGiE-1528530542730.jpg

http://localhost:3000/public/C6MGiE-1528530542730.jpg

, но все пересекаются: (

Postman получает ответ "public/C6MGiE-1528530542730.jpg"

1 Ответ

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

Проблема в том, что этот код:

const directory: string = path.join(__dirname, '/uploads/')
app.use(express.static(directory))

ищет в правильном каталоге, но не настроен для правильного пути.Поэтому, когда вы запрашиваете /uploads/C6MGiE-1528523813517.jpg, он ищет __dirname + '/uploads/uploads/C6MGiE-1528523813517.jpg', который не находит.

Вы можете исправить это, изменив URL запрошенного изображения на /C6MGiE-1528523813517.jpg или изменив код сервера на:

const directory: string = path.join(__dirname, '/uploads');
app.use('/uploads', express.static(directory));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...