Сервер Java RestFul - Получение изображений из папки веб-страниц?

Как получить изображения, которые я сохранил в папке своих веб-страниц, чтобы я мог прочитать их в буферизованное изображение?

Я нашел много объяснений в Интернете о том, как это работает, но это так запутанно! Может быть, кто-нибудь мог бы помочь мне, объяснив это мне по знакомому мне сценарию?

Это дерево папок моего сервера:

Папка дерево

Я хочу читать изображения PNG из изображений на веб-страницах из моего класса ItemStorage. Вот как выглядит этот класс:

import java.util.ArrayList;
import java.util.List;

import be.pxl.minecraft.model.Item;
import com.sun.jersey.spi.resource.Singleton;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;

@Singleton
public class ItemStorage {
    private ImageStorage test;
    private HashMap<String, Image> categories;
    private HashMap<String, BufferedImage> images;
    private List<Item> recipesList;

    public ItemStorage() {

        File directory = new File("/images");
        if (directory.isDirectory()) { //FILE PATH NOT A DIRECTORY
            BufferedImage img = null;
            for (File f : directory.listFiles()) {
                try {
                    img = ImageIO.read(f);
                    images.put(f.getName(), img);
                } catch (IOException ex) {
                    Logger.getLogger(ItemStorage.class.getName()).log(Level.SEVERE, "Error loading image", ex);
                }
            }
        }

        recipesList = new ArrayList<Item>();
        //BufferedImage air = getImage("air"); //TRIED DIFFERENT APPROACH, SEE getImage()

        //Armor
        recipesList.add(new Item(7, 2, getImage("diamond_boots"), "Boots (Diamond)",
                        "0,0,0,1,0,1,1,0,1", String.format("%d,%d", getImage("air"), R.drawable.diamond_ingot )));
    }

    public void setItems(List<Item> list) {
        recipesList = list;
    }

    public List<Item> getItems() {
        return recipesList;
    }

    @Path("/images")
    @Produces("image/png")
    public Response getImage(String imageName) { //TRYING TO HTTP TO THE IMAGE
        BufferedImage img = null;
        try {
            File imageFile = new File(imageName + ".png");
            img = ImageIO.read(imageFile);
            return Response.ok(img).build();
        } catch (IOException ex) {
            Logger.getLogger(ItemStorage.class.getName()).log(Level.SEVERE, "Error loading image", ex);
        } finally {
            return Response.ok(img).build();
        }
    }
}

Как видите, я попытался вызвать изображения как через HTTP, так и через простой каталог ввода-вывода. Это спокойный сервер, работающий под tomcat 7.0.41.0 Пожалуйста, сотрудничайте.

1 ответ

Решение

Что меня озадачивает ваш подход, так это то, что вы обращаетесь к файлу из вашего сервиса, который должен находиться в каталоге "root" ("/"). Это не внутри вашего приложения.

В сервисе отдыха нет "контекста", как у вас в мире сервлетов. Вам нужно как-то идентифицировать папку с изображениями, используя опцию конфигурации. Вы также можете проверить документацию вашего сервера REST, чтобы узнать, как получить доступ к MessageContext и HTTPRequest. Затем вы можете использовать их для доступа к папке времени выполнения вашего веб-приложения и доступа к изображениям.

Другие вопросы по тегам