From mentioned ones:
HTTP(S) would probably be easiest for anyone to write integration with. If you used some simple URL scheme like
https://example.com/apploger/device-id/can/data.log. It is ok for transferring large files, but no way to resume it so you might want to limit it to something reasonable (so say one file size is ~minute or two of transfer time) in case of device being on wonky connection
MQTT makes sense if you want to send it to multiple places at once but it would be harder to write as MQTT is primitive as hell and writing server part would be harder too. Probably better to stick to HTTP because whoever wants, can do HTTP-MQTT GW
SCP/SFTP is dedicated to file transfers so if you only want to "put files in a place", it has good security and very secure ssh key-based authentication. But there is not much in a way of application integration so the question is if you want to push files for archive purpose or to parse it in flight. AFAIK there is a builtin ability to resume upload too
I'd go with HTTP if you want to analyse data in some app near-realtime, but for just archiving purposes SCP/SFTP is just as good if not better choice (as you don't *have* to write app, just use some sftp server)