org.obiba.mica.file.rest.TempFilesResource.java Source code

Java tutorial

Introduction

Here is the source code for org.obiba.mica.file.rest.TempFilesResource.java

Source

/*
 * 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;
    }

}