Java tutorial
/** * *************************************************************************** * Copyright (c) 2010 Qcadoo Limited * Project: Qcadoo MES * Version: 1.4 * * This file is part of Qcadoo. * * Qcadoo is free software; you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published * by the Free Software Foundation; either version 3 of the License, * or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *************************************************************************** */ package com.qcadoo.mes.basic.controllers; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; import java.util.Iterator; import java.util.List; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import com.google.common.collect.Lists; import com.google.common.io.Files; import com.qcadoo.localization.api.TranslationService; import com.qcadoo.mes.basic.constants.BasicConstants; import com.qcadoo.mes.basic.constants.SubassemblyAttachmentFields; import com.qcadoo.mes.basic.constants.WorkstationAttachmentFields; import com.qcadoo.model.api.DataDefinition; import com.qcadoo.model.api.DataDefinitionService; import com.qcadoo.model.api.Entity; import com.qcadoo.model.api.NumberService; import com.qcadoo.model.api.file.FileService; import com.qcadoo.view.api.crud.CrudService; @Controller @RequestMapping("/basic") public class SubassemblyMultiUploadController { private static final Logger logger = LoggerFactory.getLogger(SubassemblyMultiUploadController.class); @Autowired private FileService fileService; @Autowired private DataDefinitionService dataDefinitionService; @Autowired private CrudService crudController; @Autowired private NumberService numberService; @Autowired private TranslationService translationService; private static final Integer L_SCALE = 2; private static final List<String> exts = Lists.newArrayList("JPG", "JPEG", "PNG", "PDF", "DOC", "DOCX", "XLS", "XLSX", "GIF", "DWG", "IPT", "IAM", "IDW", "ODT", "ODS"); @ResponseBody @RequestMapping(value = "/multiUploadFilesForSubassembly", method = RequestMethod.POST) public void upload(MultipartHttpServletRequest request, HttpServletResponse response) { Long subassemblyId = Long.parseLong(request.getParameter("techId")); Entity subassembly = dataDefinitionService .get(BasicConstants.PLUGIN_IDENTIFIER, BasicConstants.MODEL_SUBASSEMBLY).get(subassemblyId); DataDefinition attachmentDD = dataDefinitionService.get(BasicConstants.PLUGIN_IDENTIFIER, BasicConstants.MODEL_SUBASSEMBLY_ATTACHMENT); Iterator<String> itr = request.getFileNames(); MultipartFile mpf = null; while (itr.hasNext()) { mpf = request.getFile(itr.next()); String path = ""; try { path = fileService.upload(mpf); } catch (IOException e) { logger.error("Unable to upload attachment.", e); } if (exts.contains(Files.getFileExtension(path).toUpperCase())) { Entity atchment = attachmentDD.create(); atchment.setField(SubassemblyAttachmentFields.ATTACHMENT, path); atchment.setField(SubassemblyAttachmentFields.NAME, mpf.getOriginalFilename()); atchment.setField(SubassemblyAttachmentFields.SUBASSEMBLY, subassembly); atchment.setField(SubassemblyAttachmentFields.EXT, Files.getFileExtension(path)); BigDecimal fileSize = new BigDecimal(mpf.getSize(), numberService.getMathContext()); BigDecimal divider = new BigDecimal(1024, numberService.getMathContext()); BigDecimal size = fileSize.divide(divider, L_SCALE, BigDecimal.ROUND_HALF_UP); atchment.setField(SubassemblyAttachmentFields.SIZE, size); attachmentDD.save(atchment); } } } @RequestMapping(value = "/getAttachmentForSubassembly.html", method = RequestMethod.GET) public final void getAttachment(@RequestParam("id") final Long[] ids, HttpServletResponse response) { DataDefinition attachmentDD = dataDefinitionService.get(BasicConstants.PLUGIN_IDENTIFIER, BasicConstants.MODEL_SUBASSEMBLY_ATTACHMENT); Entity attachment = attachmentDD.get(ids[0]); InputStream is = fileService .getInputStream(attachment.getStringField(SubassemblyAttachmentFields.ATTACHMENT)); try { if (is == null) { response.sendRedirect("/error.html?code=404"); } response.setHeader("Content-disposition", "inline; filename=" + attachment.getStringField(SubassemblyAttachmentFields.NAME)); response.setContentType( fileService.getContentType(attachment.getStringField(SubassemblyAttachmentFields.ATTACHMENT))); int bytes = IOUtils.copy(is, response.getOutputStream()); response.setContentLength(bytes); response.flushBuffer(); } catch (IOException e) { logger.error("Unable to copy attachment file to response stream.", e); } } }