I would read the file into some sort of buffer on your UI, chop it up into small packets, and send it.
For example, on my UI I allow the user to upload a new firmware image to my device. So I send that firmware file over the UART one line at a time. My MSP430 reads that line into a buffer, which is X characters long, validates it, stores it to a location on an external flash memory, and then receives the next line. Once it has received all of the data, the MSP430 branches into its bootloader code.
You just need to decide how you are going to chunk the data up and size your buffers accordingly.
I do not need to define any special serial protocol because my files are already formatted in a particular way and I can send the file one line at a time and parse it on the other end.
http://en.wikipedia.org/wiki/SREC_(file_format)
But for a generic application perhaps you should define a light weight protocol. Like each line will start with a certain character, a sequence number, a payload length, and maybe an end byte. Something along these lines:
| Byte 0 | Byte 1 | Byte 2 | Byte 3 | Bytes 4 to (p+4) | Byte 5+p |
|----------------------|-----------------|-------------------------------------|----------------|------------------|--------------------|
| Arbitrary Start Byte | Sequence | Total number of packets - up to 255 | Payload Length | The data | Arbitrary End Byte |
| 0x0A | Number x | Of X | p < 256 | | 0xFF |
Then you can discard the whole file if one chunk is missing. You could also include a basic checksum to verify that the line didn't get corrupted when it was on the wire.
The parser for this sort of thing would be relatively straight forward to write on both sides.
EDIT: For testing purposes, I reccomend using realterm. It is a flexible binary terminal program that will let you send arbitrary data, files, etc. You can also use it to monitor serial ports.