You should never send the final deliverables before you’ve been paid in full. This way the client will pay you on time, because they’ll want the work. If you send the files before they’ve paid the invoice, they have no incentive to speed up the payment process.
Always take a down payment before you begin work. This shows commitment from the client and automatically makes them more invested in the project.
Clients have to pay on your terms, don’t let them bully you on this. You must give them a reasonable amount of days to pay, but if they go past this and the project drags on, you should have a contingency in your contract stating that you’ll charge a late payment fee.
If a client is late to pay an invoice, send a polite follow up before you get angry. You don’t know what position they’re in, and while you don’t want to be taken advantage of, empathy and giving them the benefit of the doubt to start with doesn’t hurt.