I cannot test this because I don’t have your code, but maybe you can get some ideas from it:
add_filter( 'wp_unique_filename', 'custom_image_name', 10, 2 );
$img_id01 = media_handle_upload( 'img_main', $postID );
remove_filter( 'wp_unique_filename', 'custom_image_name', 10, 2 );
function custom_image_name( $filename, $ext ) {
global $postID;
$post = get_post( $postID );
return $filename . '-' . $post->post_name . $ext;
}
This is not very elegant because $postID
needs to be in a global scope, but it might do the job.