private Attachment prepareAttachment( String fileName, String contentType, User user, byte[] contents, String tags) { try { Attachment a = new Attachment(); a.setName(fileName); a.setMimeType(contentType); File root = new File(DEFAULT_UPLOAD_DIRECTORY, user.getLogin()); root.mkdirs(); File tmpFile = File.createTempFile("upload_", ".bin", root); FileUtils.writeToFile(tmpFile, contents); a.setSize((long) contents.length); a.setMD5(FileUtils.getMD5(tmpFile)); a.setFileName(user.getLogin() + "/" + tmpFile.getName()); return a; } catch (Exception ex) { return null; } }
@Override public Attachment renameAttachment(Long userId, long attachmentId, String name) { if (log.isDebugEnabled()) { log.debug(">> renameAttachment() : userId =" + userId + ", attachmentId=" + attachmentId); } if (userId == null) { if (log.isTraceEnabled()) { log.trace("<< renameAttachment() : null // operation is not permitted"); } return null; } User u = em.find(User.class, userId); if (u == null) { if (log.isTraceEnabled()) { log.trace("<< renameAttachment() : null // no such user! operation is not permitted"); } return null; } Attachment att = em.find(Attachment.class, attachmentId); if (att == null) { if (log.isTraceEnabled()) { log.trace("<< renameAttachment() : null // invalid attachmentId=" + attachmentId); } return null; } if (!isOwner(u, att) && u.getUserGroup() != User.ADMIN) { if (log.isTraceEnabled()) { log.trace("<< renameAttachment() : null // operation is not permitted"); } return null; } att.setName(name); if (log.isDebugEnabled()) { log.debug(">> renameAttachment() : userId =" + userId + ", attachmentId=" + attachmentId); } return em.merge(att); }
private Attachment prepareAttachment(User user, List<ReshakaUploadedFile> files, String tags) { if (files.isEmpty()) { if (log.isDebugEnabled()) { log.debug("prepareAttachment() : List of files is empty! Nothing to compress."); } return null; } if (files.size() == 1) { if (log.isTraceEnabled()) { log.trace( "prepareAttachment() : Single file is being uploaded. Delegating to uploadFile()"); } try { return prepareAttachment( files.get(0).getFileName(), files.get(0).getContentType(), user, files.get(0).getContents(), tags); } catch (IOException ex) { if (log.isTraceEnabled()) { log.trace("prepareAttachment() : I/O exception" + ex); } return null; } } try { // create zip file log.trace("prepareAttachment(): Creating zip-file"); File root = new File(DEFAULT_UPLOAD_DIRECTORY, user.getLogin()); root.mkdirs(); File file = File.createTempFile("upload_", ".zip", root); try (ZipOutputStream zos = new ZipOutputStream(file)) { zos.setEncoding("utf-8"); zos.setMethod(ZipOutputStream.DEFLATED); zos.setLevel(Deflater.BEST_COMPRESSION); for (ReshakaUploadedFile uf : files) { addFileToZip(zos, uf, uf.getFileName()); } } if (log.isDebugEnabled()) { log.debug("prepareAttachment(): Files are saved at " + file); } if (file.length() > MAX_ZIP_SIZE) { file.delete(); throw new IOException("File too large."); } // Create attachment Attachment att = new Attachment(); att.setName(file.getName()); att.setMimeType("application/zip"); att.setSize(file.length()); att.setMD5(FileUtils.getMD5(file)); att.setFileName(user.getLogin() + "/" + file.getName()); if (log.isTraceEnabled()) { log.trace("<< prepareAttachment()"); } return att; } catch (IOException ex) { log.error("prepareAttachment(): Failed to upload files. ", ex); return null; } }