code: public FTPUploadRequest addFileToUpload(String filePath, String remotePath, UnixPermissions permissions)
              throws FileNotFoundException {
          UploadFile file = new UploadFile(filePath);
  
          if (remotePath == null || remotePath.isEmpty()) {
              throw new IllegalArgumentException("You have to specify a remote path");
          }
  
          file.setProperty(FTPUploadTask.PARAM_REMOTE_PATH, remotePath);
  
          if (permissions != null) {
              file.setProperty(FTPUploadTask.PARAM_PERMISSIONS, permissions.toString());
          }
  
          params.files.add(file);
          return this;
      }
docs: Add a file to be uploaded.
  @param filePath path to the local file on the device
  @param remotePath absolute path (or relative path to the default remote working directory)
  of the file on the FTP server. Valid paths are for example:
  {@code /path/to/myfile.txt}, {@code relative/path/} or {@code myfile.zip}.
  If any of the directories of the specified remote path does not exist,
  they will be automatically created. You can also set with which permissions
  to create them by using
  {@link FTPUploadRequest#setCreatedDirectoriesPermissions(UnixPermissions)}
  method.
  <br><br>
  Remember that if the remote path ends with {@code /}, the remote file name
  will be the same as the local file, so for example if I'm uploading
  {@code /home/alex/photos.zip} into {@code images/} remote path, I will have
  {@code photos.zip} into the remote {@code images/} directory.
  <br><br>
  If the remote path does not end with {@code /}, the last path segment
  will be used as the remote file name, so for example if I'm uploading
  {@code /home/alex/photos.zip} into {@code images/vacations.zip}, I will
  have {@code vacations.zip} into the remote {@code images/} directory.
  @param permissions UNIX permissions for the uploaded file
  @return {@link FTPUploadRequest}
  @throws FileNotFoundException if the local file does not exist