As you already noted, many browsers just won't allow you to do this. That is 1) a Good Thing (security and whatnot), 2) the Correct Answer (there's no way to force them to give the full path, short of some exploit). I'm sorry that you don't like it, but that is unlikely to make the answer different.
On a more positive note, it might be possible using some Flash or Java applet to access local files (e.g. Uploadify), but then the user needs to permit its privilege elevation.
Edit: I checked what GMail does, and you probably want something completely different from your question: it's using a cleverly disguised iframe
(no borders, same background, looks like part of the page), which contains a small form for file upload. Simplified:
<form id="main_mail_form">
<input type="hidden" name="compose_mail_identifier" value="id_beef-cafe">
<!-- buttons and previous form fields - subject, to, cc -->
<iframe src="attachments?for_message=id_beef-cafe">
<!-- note that we're passing ^^^^^^^^^^^^ the same identifier here -->
</iframe>
<!-- other form fields and buttons -->
</form>
Inside the iframe:
<form id="attachment_mail_form">
<input type="hidden" name="compose_mail_identifier" value="id_beef-cafe">
<!-- ^^ note that this has the same value as the main form -->
<input type="file">
<!-- other form elements -->
</form>
When you add an attachment to the mail, you are only submitting the form inside the iframe. Google seems to match the attachments with the e-mails using some per-message-unique identifier (named compose_mail_identifier
in the example). That way, the attachments and the message are handled by different forms, and only merged into an e-mail when you click "Send".