Communication with the client is really important. I would speak to her and mention that you under estimated and negotiate with her if it is possible to come to a new agreement that better suits both of you. The two of you should go through the options you've mentioned and decide which option is the best. (Apart from the charity one! That's your personal choice after discussion with her about the rest.)
It is really important to define the scope of your work beforehand. Document it, agree on it, and don't deviate from it. It is also really important to define what you do in general as a professional. Even though you may be capable of doing something, does not necessarily mean you should do it for a client. While I can program in C, it is not my speciality and so I do not do that for clients. I will point them in the direction of a C programmer. This allows me time to focus on my work and spend time doing what I want to specialise in. Additionally, If I do work that is not my area of expertise, I may perform sub-optimally and the client may get a bad impression.
If a client has trouble downloading and unzipping the file I send them and it is a significant amount of work to fix, I'll mention that this is not within the scope of the work that I'm being paid to do and charge them extra. You cannot foresee all of these little things that will come up. This is why defining your work scope is so important.
The client is relying on you, as the professional, to advise her on how long these things will take. With experience you begin to get better at estimating, defining work scopes, and see problems before they arise (to some extent). However, it is impossible to predict everything, and so these kinds of situations will inevitably happen, and when they do, communicate and renegotiate.