Java tutorial
/* * Copyright (c) 2018 OBiBa. All rights reserved. * * This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.obiba.mica.file.rest; import java.io.IOException; import java.net.URI; import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.obiba.mica.file.TempFile; import org.obiba.mica.file.service.TempFileService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; import com.codahale.metrics.annotation.Timed; @Path("/files/temp") @RequiresPermissions({ "/files:UPLOAD" }) public class TempFilesResource { private static final Logger log = LoggerFactory.getLogger(TempFilesResource.class); @Inject private ApplicationContext applicationContext; @Inject private TempFileService tempFileService; @POST @Consumes(MediaType.MULTIPART_FORM_DATA) @Timed public Response upload(@Context HttpServletRequest request, @Context UriInfo uriInfo) throws IOException, FileUploadException { FileItem fileItem = getUploadedFile(request); if (fileItem == null) throw new FileUploadException("Failed to extract file item from request"); TempFile tempFile = tempFileService.addTempFile(fileItem.getName(), fileItem.getInputStream()); URI location = uriInfo.getBaseUriBuilder().path(TempFilesResource.class) .path(TempFilesResource.class, "file").build(tempFile.getId()); return Response.created(location).build(); } @Path("/{id}") public TempFileResource file(@PathParam("id") String id) { TempFileResource tempFileResource = applicationContext.getBean(TempFileResource.class); tempFileResource.setId(id); return tempFileResource; } FileItem getUploadedFile(HttpServletRequest request) throws FileUploadException { FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); for (FileItem fileItem : upload.parseRequest(request)) { if (!fileItem.isFormField()) { return fileItem; } } return null; } }