package ee.esutoniagodesu.web.rest;
import ee.esutoniagodesu.service.SHAFileService;
import org.apache.tika.mime.MimeType;
import org.apache.tika.mime.MimeTypeException;
import org.apache.tika.mime.MimeTypes;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.inject.Inject;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Map;
import java.util.Properties;
/**
* REST controller for managing Audio.
*/
@RestController
@RequestMapping("/api/media")
public class MediaResource {
private static final Logger log = LoggerFactory.getLogger(MediaResource.class);
@Inject
private SHAFileService service;
@RequestMapping(value = "/{fileSha}", method = RequestMethod.GET)
public ResponseEntity<InputStreamResource> get(@PathVariable String fileSha) throws IOException, MimeTypeException {
log.debug("REST request to get Media : {}", fileSha);
try {
Map.Entry<Properties, File> entry = service.getWithProperties(fileSha);
Properties properties = entry.getKey();
File file = entry.getValue();
String mimeType = properties.getProperty("mime-type");
StringBuilder filename = new StringBuilder(fileSha);
String origExt = properties.getProperty("orig-extension");
if (origExt != null) {
filename.append(".").append(origExt);
} else {
try {
MimeTypes allTypes = MimeTypes.getDefaultMimeTypes();
MimeType mime = allTypes.forName(mimeType);
String ext = mime.getExtension();
filename.append(".").append(ext);
} catch (Exception e) {
log.error("no extension", e.getMessage());
}
}
HttpHeaders header = new HttpHeaders();
header.setContentType(MediaType.valueOf(mimeType));
header.set("Content-Disposition", "inline; filename=" + filename.toString());
header.setContentLength(Long.valueOf(properties.getProperty("length")));
InputStreamResource isr = new InputStreamResource(new FileInputStream(file));
return ResponseEntity.ok().headers(header).body(isr);
} catch (FileNotFoundException e) {
log.error("FileNotFoundException: ", e.getMessage());
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
}
}