All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ch.ethz.inf.vs.californium.examples.resources.ImageResource Maven / Gradle / Ivy

The newest version!
package ch.ethz.inf.vs.californium.examples.resources;

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;

import ch.ethz.inf.vs.californium.coap.CoAP.ResponseCode;
import ch.ethz.inf.vs.californium.coap.MediaTypeRegistry;
import ch.ethz.inf.vs.californium.coap.Response;
import ch.ethz.inf.vs.californium.server.resources.CoapExchange;
import ch.ethz.inf.vs.californium.server.resources.ResourceAttributes;
import ch.ethz.inf.vs.californium.server.resources.ResourceBase;

/**
 * This resource responds with an image to GET requests. Use the ACCEPT option
 * to choose between the JPG and PNG file.
 * 
 * @author Matthias Kovatsch, Martin Lanter
 */
public class ImageResource extends ResourceBase {

	private String filePath = "src\\main\\resources\\data\\image\\";
	private String fileName = "image";
	
	private List supported = new ArrayList();

	public ImageResource(String resourceIdentifier) {
		super(resourceIdentifier);
		
		ResourceAttributes attributes = getAttributes();
		attributes.setTitle("GET an image with different content-types");
		attributes.addResourceType("Image");
		
		supported.add(MediaTypeRegistry.IMAGE_PNG);
		supported.add(MediaTypeRegistry.IMAGE_JPEG);
		
		for (int ct : supported) {
			attributes.addContentType(ct);
		}
		
		attributes.setMaximumSizeEstimate(18029);
	}

	@Override
	public void handleGET(CoapExchange exchange) {
		Integer ct = MediaTypeRegistry.IMAGE_PNG;
		if (exchange.getRequestOptions().hasAccept()) {
			ct = exchange.getRequestOptions().getAccept();
			if (!supported.contains(ct)) {
				exchange.respond(new Response(ResponseCode.NOT_ACCEPTABLE));
				return;
			}
		}
		
		String filename = filePath + fileName + "." + MediaTypeRegistry.toFileExtension(ct);

		// load representation from file
		System.out.println("Opening file "+filename+", "+new File(filename).getAbsolutePath());
		File file = new File(filename);
		
		if (!file.exists()) {
			exchange.respond(ResponseCode.INTERNAL_SERVER_ERROR, "Image file not found");
			return;
		}
		
		// get length of file for buffer
        int fileLength = (int)file.length();
        byte[] fileData = new byte[fileLength];
        
        try
        {
			// open input stream from file
        	FileInputStream fileIn = new FileInputStream(file);
			// read file into byte array
			fileIn.read(fileData);
			fileIn.close();
			
			// create response
			Response response = new Response(ResponseCode.CONTENT);
			response.setPayload(fileData);
			response.getOptions().setContentFormat(ct);

			exchange.respond(response);
			
        } catch (Exception e) {
			exchange.respond(ResponseCode.INTERNAL_SERVER_ERROR, "I/O error");
        }
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy