2012-07-31 14 views
14

ठीक है, input[type=file] की फ़ाइलें विशेषता केवल पढ़ने योग्य है। इसलिए मैं इस इनपुट तत्व में अपना ब्लॉब डेटा नहीं लिख सकता।क्रोम: जावास्क्रिप्ट के साथ ब्लॉब से फ़ाइल इनपुट बनाएँ?

लेकिन अगर मैं Javscript का उपयोग कर एक नया इनपुट फ़ाइल तत्व बना सकता हूं, तो निर्माण पर ब्लॉब डेटा डालना संभव है? मुझे केवल chrome (extension) में काम करने वाले समाधानों में दिलचस्पी है - अन्य ब्राउज़र कोई फर्क नहीं पड़ता।

+3

मैं हाल ही में यह कोशिश की है, और यह संभव नहीं है। '' में फ़ाइल को संशोधित करने के लिए एकमात्र उपयोग केस तब होता है जब आप पहले अपलोड करने वाली फ़ाइल को बदलना चाहते हैं। यदि आप इसे पूरा करने के लिए कोई तरीका ढूंढ रहे हैं, तो XMLHttpRequest स्तर 2 विनिर्देश से 'FormData' फ़ंक्शन का उपयोग करें। कोड उदाहरण http://stackoverflow.com/a/11628694 (संभावित रूप से डुप्लिकेट प्रश्न) पर पाए जा सकते हैं और http://stackoverflow.com/a/11382138 –

+0

@RobW फ़ाइल इनपुट के मान को सेट करना यह एक सुविधाजनक तरीका भी है उपयोगकर्ता को इंगित करने के लिए कि उनका अपलोड मान्य/अमान्य है, खासकर जब उनके पास डिस्क से फ़ाइल चुनने या फ़ाइल में ब्राउज़र बनाने का विकल्प होता है (यानी 'getUserMedia' के माध्यम से)। यह मेरा उपयोग मामला है - एक माइक्रोफ़ोन से फ़ाइल इनपुट बॉक्स भरना जब ब्राउज़र डिफ़ॉल्ट रूप से इसका समर्थन नहीं करता है (जो कुछ ब्राउज़र करते हैं)। – Brilliand

उत्तर

1

new File() कंस्ट्रक्टर क्रोमियम/क्रोम 38+ पर उपलब्ध है। File Constructor Sample, File API देखें।

var date = new Date(), 
 
    filename = "file-" + date.getTime() + ".html"; 
 

 
var generatedFile = new File(
 
    ["<!DOCTYPE html><html><body>" + filename + "</body></html>"] 
 
    , filename 
 
    , { 
 
    type: "text/html", 
 
    lastModified: date 
 
    } 
 
); 
 

 
var objUrl = URL.createObjectURL(generatedFile); 
 

 
console.log(generatedFile, objUrl); 
 

 
var reader = new FileReader(); 
 

 
reader.addEventListener("load", function(event) { 
 
    console.log(event.target.result) 
 
}); 
 

 
reader.readAsText(generatedFile);

संबंधित मुद्दे