code: public String start() {
  
          // ensure that this method can only be called once
          if (m_called) {
              throw new UnsupportedOperationException();
          }
          m_called = true;
  
          // create a upload listener
          CmsUploadListener listener = createListener();
          try {
              // try to parse the request
              parseRequest(listener);
              // try to create the resources on the VFS
              createResources(listener);
              // trigger update offline indexes, important for gallery search
              OpenCms.getSearchManager().updateOfflineIndexes();
          } catch (CmsException e) {
              // an error occurred while creating the resources on the VFS, create a special error message
              LOG.error(e.getMessage(), e);
              return generateResponse(Boolean.FALSE, getCreationErrorMessage(), formatStackTrace(e));
          } catch (CmsUploadException e) {
              // an expected error occurred while parsing the request, the error message is already set in the exception
              LOG.debug(e.getMessage(), e);
              return generateResponse(Boolean.FALSE, e.getMessage(), formatStackTrace(e));
          } catch (Throwable e) {
              // an unexpected error occurred while parsing the request, create a non-specific error message
              LOG.error(e.getMessage(), e);
              String message = m_bundle.key(org.opencms.ade.upload.Messages.ERR_UPLOAD_UNEXPECTED_0);
              return generateResponse(Boolean.FALSE, message, formatStackTrace(e));
          } finally {
              removeListener(listener.getId());
          }
          // the upload was successful inform the user about success
          return generateResponse(Boolean.TRUE, m_bundle.key(org.opencms.ade.upload.Messages.LOG_UPLOAD_SUCCESS_0), "");
      }
docs: Starts the upload.<p>
  
  @return the response String (JSON)