#node.js #image #express
#node.js #изображение #экспресс
Вопрос:
У меня есть несколько изображений, сохраненных в папке сервера assets/img/products/
В файле server.js
я делаю products
папку общедоступной:
app.use(express.static('./assets/img/products'));
но если я использую ссылку: http://localhost:3000/assets/img/products/111_#1.jpg
я получаю:
{"status":404,"message":"Not found"}
здесь мои серверные папки:
- server
server.js
- assets
- img
- products
111_#1.jpg
какие-нибудь идеи??
Спасибо
Комментарии:
1. Вы просто не указываете полный путь в URL, это localhost:3000/filename.jpg .
2. @wiktor Zychla Я получаю ту же ошибку…
3. проблема, похоже, в # в имени изображения
4. Да, это так. Все, что после #, называется фрагментом uri и не передается на сервер.
5. @Wiktor Zychla если вы напишете полный ответ на этот вопрос, я могу пометить его как лучший ответ
Ответ №1:
В дополнение к комментарию @Wiktor Zychla.
Прямое копирование, вставленное с веб-сайта ExpressJS.
путь, который вы предоставляете функции express.static, относится к каталогу, из которого вы запускаете свой процесс узла. Если вы запускаете приложение express из другого каталога, безопаснее использовать абсолютный путь к каталогу, который вы хотите обслуживать:
app.use('/static', express.static(path.join(__dirname, 'public')))
Может быть, ваш путь неверен? Пожалуйста, проверьте это и не забудьте использовать path.join
Ответ №2:
отправьте имя изображения в параметрах и укажите путь к этому изображению в api, как показано ниже
let image_name = req.params.image_name
let directory_name =`path/to/image/where/is/image/stored/${image_name}`
// read the image using fs and send the image content back in the response
fs.readFile(directory_name, function (err, content) {
if (err) {
res.writeHead(400)
console.log(err);
res.end("No such image");
} else {
//specify the content type in the response will be an image
res.writeHead(200);
res.end(content);
}
});