code: private void putBinds() throws BindException
    {
      createStageIfNeeded();
  
      String putStatement = getPutStmt(bindDir.toString(), stagePath);
  
      for (int i = 0; i < PUT_RETRY_COUNT; i++)
      {
        try
        {
          SFStatement statement = new SFStatement(session);
          SFBaseResultSet putResult = statement.execute(putStatement, null, null);
          putResult.next();
  
          // metadata is 0-based, result set is 1-based
          int column = putResult.getMetaData().getColumnIndex(
              SnowflakeFileTransferAgent.UploadColumns.status.name()) + 1;
          String status = putResult.getString(column);
  
          if (SnowflakeFileTransferAgent.ResultStatus.UPLOADED.name().equals(status))
          {
            return; // success!
          }
          logger.debug("PUT statement failed. The response had status %s.", status);
        }
        catch (SFException | SQLException ex)
        {
          logger.debug("Exception encountered during PUT operation. ", ex);
        }
      }
  
      // if we haven't returned (on success), throw exception
      throw new BindException("Failed to PUT files to stage.", BindException.Type.UPLOAD);
    }
docs: Upload binds from local file to stage
  
  @throws BindException if uploading the binds fails