Пример #1
0
  /**
   * Stores uploaded file in database. If there are several files, they are compressed into zip
   * archive (with filename = user_login.zip).
   *
   * @param user Owner of the attachment
   * @param files List of uploaded files to be saved into database
   * @return ID of attachment in the database or null if operation failed.
   */
  @Override
  public Attachment uploadFiles(User user, List<ReshakaUploadedFile> files, String tags) {

    if (log.isTraceEnabled()) {
      log.trace(">> uploadFiles(): " + files);
    }

    if (!checkUploadRights(user)) {
      return null;
    }

    if (files.isEmpty()) {
      if (log.isDebugEnabled()) {
        log.debug("List of files is empty! Nothing to compress.");
      }
      return null;
    }

    try {
      Attachment att = prepareAttachment(user, files, tags);

      if (att.getSize() > MAX_ZIP_SIZE) {
        if (log.isTraceEnabled()) {
          log.trace("File too large!");
        }
        throw new IOException("File too large.");
      }

      em.persist(att);

      Set<User> uset = new HashSet();
      uset.add(user);
      att.setUser(uset);
      em.merge(att);

      if (log.isTraceEnabled()) {
        log.trace("<< uploadFiles(): " + att);
      }
      return att;
    } catch (Exception ex) {
      log.error("uploadFiles(): Failed to upload files. ", ex);
      return null;
    }
  }