How to upload a csv file with an admin form?
In your custom form create input button like

$form['upload_csv'] = array(
        '#name' =&gt; 'files[mycsv_data]',
        '#type' =&gt; 'file',
        '#title' =&gt; 'Upload csv'
    );


Next in form submit you can use 

file_save_upload($source,
                array('file_validate_extensions' =&gt; array('csv')),
                $destination_dir,
                FILE_EXISTS_REPLACE)

Here for getting uploaded file details like file name and file path you can use $_FILES global variable.


and then, 

if ($file) {
    $file-&gt;status = FILE_STATUS_PERMANENT;
    file_save($file); 
}