2012-02-09 11 views
7

मैं डार्ट को आजमा रहा हूं, लेकिन मैं समझ नहीं पा रहा हूं कि उपयोगकर्ता से सर्वर पर एक छवि कैसे भेजनी है। मेरे पास मेरा इनपुट-टैग है, और मैं इसे DART कोड में प्राप्त कर सकता हूं, लेकिन मुझे इससे पढ़ने के लिए प्रतीत नहीं होता है। इम तरह कुछ की कोशिश कर रहा:फ़ाइल इनपुट और डार्ट

InputElement ie = document.query('#myinputelement'); 

ie.on.change.add((event){<br/> 
    InputElement iee = document.query('#myinputelement');<br/> 
    FileList mfl = iee.files;<br/> 
    File myFile = mlf.item(0);<br/> 

    FileReader fr = new FileReader(); 
    fr.readAsBinaryString(myFile); 

    String result = fr.result; //this is always empty 
}); 

युक्त एचटीएमएल के साथ:

<input type="file" id="myinputelement"> 

मैं वास्तव में, आशा है कि आप नहीं कर सकते मेरी मदद IM थोड़े अटक। मैं बस गायब हो सकता हूं कि फ़ाइलreader के लिए अधिभार कैसे करें, या शायद मैं इसे पूरी तरह से गलत कर रहा हूं।

+0

आप 'फ़ाइल के माध्यम से क्रोम में अपने पेज लोड कर रहे हैं: //' प्रोटोकॉल? यदि ऐसा है, तो आपको कुछ झंडे को सक्षम करने की आवश्यकता हो सकती है http://stackoverflow.com/a/7691772/180740 - या HTTP के माध्यम से उन्हें एक्सेस करने के लिए फ़ाइलों को अपलोड करें। –

उत्तर

10

FileReader एपीआई असीमित है इसलिए आपको ईवेंट हैंडलर का उपयोग करने की आवश्यकता है।

var input = window.document.querySelector('#upload'); 
Element log = query("#log"); 

input.addEventListener("change", (e) { 
    FileList files = input.files; 
    Expect.isTrue(files.length > 0); 
    File file = files.item(0); 

    FileReader reader = new FileReader(); 
    reader.onLoad = (fileEvent) { 
    print("file read"); 
    log.innerHTML = "file content is ${reader.result}"; 
    }; 
    reader.onerror = (evt) => print("error ${reader.error.code}"); 
    reader.readAsText(file); 
}); 

आप भी फ्लैग के साथ शुरू करने --allow-फाइल एक्सेस-से-फ़ाइलें

+0

मैं केवल डार्ट का उपयोग करने की कोशिश कर रहा हूं: एचटीएमएल एटीएम (आप दोनों का उपयोग नहीं कर सकते: /)। डार्ट का उपयोग करते समय: एचटीएमएल, आप हैंडलर को फ़ाइलreader में जोड़ नहीं सकते हैं। आशा है कि आप मदद नहीं कर सकते: पी – user1199863

+0

दोनों पुस्तकालयों का उपयोग करने के उदाहरण को –

+1

वाह, धन्यवाद, बहुत अच्छा आदमी। मैं इसकी प्रशंसा करता हूँ! – user1199863

2

यह नहीं है करके अपने ब्राउज़र है, जो क्रोम में किया जा सकता करने के लिए से फाइल अपलोड की अनुमति की जरूरत है डार्ट का उपयोग करने के लिए आवश्यक (कोई और): डोर्ट से एक के बजाय dom FileReader: html।

FileReader fr = new FileReader(); 
fr.on.load.add((fe) => doSomethingToString(fe.target.result)); 
fr.readAsBinaryString(myFile); 
2

यह कैसे dart:html का उपयोग कर एक फ़ाइल को पढ़ने के लिए है: यदि आप फ़ाइल पाठक के लिए एक घटना श्रोता जोड़ने के लिए, इस तरह

आपका कोड काम करना चाहिए।

document.querySelector('#myinputelement`).onChange.listen((changeEvent) { 
    List fileInput = document.querySelector('#myinputelement').files; 

    if (fileInput.length > 1) { 
     // More than one file got selected somehow, could be a browser bug. 
     // Unless the "multiple" attribute is set on the input element, of course 
    } 
    else if (fileInput.isEmpty) { 
     // This could happen if the browser allows emptying an upload field 
    } 

    FileReader reader = new FileReader(); 
    reader.onLoad.listen((fileEvent) { 
      String fileContent = reader.result; 
      // Code doing stuff with fileContent goes here! 
    }); 

    reader.onError.listen((itWentWrongEvent) { 
      // Handle the error 
    }); 

    reader.readAsText(fileInput[0]); 
}); 
0

मेरे प्रयास

void fileSelected(Event event) async { 
    final files = (event.target as FileUploadInputElement).files; 
    if (files.isNotEmpty) { 
     final reader = new FileReader(); 

     // ignore: unawaited_futures 
     reader.onError.first.then((evt) => print('error ${reader.error.code}')); 
     final resultReceived = reader.onLoad.first; 
     reader.readAsArrayBuffer(files.first); 

     await resultReceived; 
     imageReference.fileSelected(reader.result as List<int>); 
    } 
    } 
संबंधित मुद्दे