Енді Е прав, що для цього не існує способу, заснованого на HTML *; але якщо ви бажаєте використовувати Flash, ви можете це зробити. Наступне працює надійно на системах, на яких встановлено Flash. Якщо ваша програма повинна працювати на iPhone, тоді, звичайно, вам знадобиться резервне рішення на основі HTML.
* ( Оновлення 22.04.2013: HTML тепер підтримує це в HTML5. Дивіться інші відповіді.)
Завантаження Flash також має інші переваги - Flash надає можливість показувати індикатор виконання під час завантаження великого файлу. (Я майже впевнений, що так робить Gmail, використовуючи Flash за кадром, хоча я можу помилитися в цьому).
Ось зразок програми Flex 4, яка дозволяє користувачеві вибрати файл, а потім відображає його:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
creationComplete="init()">
<fx:Declarations>
</fx:Declarations>
<s:Button x="10" y="10" label="Choose file..." click="showFilePicker()" />
<mx:Image id="myImage" x="9" y="44"/>
<fx:Script>
<![CDATA[
private var fr:FileReference = new FileReference();
// Called when the app starts.
private function init():void
{
// Set up event handlers.
fr.addEventListener(Event.SELECT, onSelect);
fr.addEventListener(Event.COMPLETE, onComplete);
}
// Called when the user clicks "Choose file..."
private function showFilePicker():void
{
fr.browse();
}
// Called when fr.browse() dispatches Event.SELECT to indicate
// that the user has picked a file.
private function onSelect(e:Event):void
{
fr.load(); // start reading the file
}
// Called when fr.load() dispatches Event.COMPLETE to indicate
// that the file has finished loading.
private function onComplete(e:Event):void
{
myImage.data = fr.data; // load the file's data into the Image
}
]]>
</fx:Script>
</s:Application>