Не могу открыть картинку на localhost (формата jpeg)

205
03 февраля 2020, 04:50

возник вопрос, написал я такой себе сервер. Если я запрашиваю картинку, то получаю следующее: Чтение для открытия HTML страниц вопросов не вызывает:

С помощью этого кода я читаю файл:

ifstream f(text);
            if (f.good())
            {
                string str((istreambuf_iterator<char>(f)), istreambuf_iterator<char>());
                answer = str;
                code = 200;
            }
            f.close();

И отправляю ответ клиенту:

ostringstream response << "HTTP/1.1 " << code << " OK\r\n" // code - 200 или 404
                << "Version: HTTP / 1.1\r\n"
                << "Content-Type: " << s // запрашиваемый файл
                << "Content-Length: " << answer.length() // длина строки
                << "\r\n\r\n"
                << answer; // строка для чтения
send(client_socket, response.str().c_str(), response.str().length(), 0);

В случае отправки картинки:

s = "image/jpeg;\r\n";

Как мне прочитать картинку и записать в строку? Или лучше отвечать html страничкой (к которой прикреплен файл)? Спасибо!)

Answer 1

Вы пытаетесь с бинарным файлом (png) обращаться так же, как и с символьной строкой. Однако в строке байт 0 является завершающим символом, а файле png нулевые байты идут начиная с позиции 8. Соответственно у вас передаются только первые 8 байт, а это ‰PNG плюс пара переводов строки. Что мы и наблюдаем на ваших скриншотах. Решение: вместо строки использовать массив байт, в котором 0 не рассматривается как ограничитель.

ДОПОЛНЕНИЕ

Пример программы, которая читает в массив некий png (просто читает и все):

#include <iostream>
#include <fstream>
#include <filesystem>
#include <vector>
using namespace std;
int main() {
  const filesystem::path fileName = LR"(C:\Temp\cmmentics.png)";
  auto fileSize = filesystem::file_size(fileName);
  vector<char> fileBuffer(fileSize);
  ifstream is(fileName, ios::binary);
  is.read(fileBuffer.data(), fileSize);
  return 0;
}
READ ALSO
Выборка элементов в TinyMCE 5

Выборка элементов в TinyMCE 5

коллеги! Целый день бился с данной проблемой, и никак не получается её решитьДокументация TinyMCE, на мой взгляд, уж очень сложна, да еще и на английском

281
Не работает метод .hide, а метод .closest работает

Не работает метод .hide, а метод .closest работает

Есть два примера кода, 1(код в котом закоментирован методclosest) и 2(в котором нет коментария) в первом случае код не может применить метод

257
3d-эффект картинки

3d-эффект картинки

Ребят, подскажите, как делается 3d-эффект фото на этом сайте: https://erudito/ Фото наклоняется в сторону курсора

322
вкладки табы js [закрыт]

вкладки табы js [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском»

311