2016-12-07 18 views
7

<input type="file"> से प्राप्त फ़ाइलों की गुण केवल पढ़ने के लिए हैं।जावास्क्रिप्ट में किसी फ़ाइल ऑब्जेक्ट की संशोधित प्रति कैसे बनाएं?

उदाहरण के लिए, file.name को फिर से लिखने का निम्न प्रयास या तो चुपचाप विफल हो जाएगा या TypeError: Cannot assign to read only property 'name' of object '#<File>' फेंक देगा।

<input onchange="onchange" type="file"> 
onchange = (event) => { 
    const file = event.target.files[0]; 
    file.name = 'foo'; 
} 

प्रतिलिपि बनाने के लिए के माध्यम से Object.assign({}, file) विफल रहता है प्रयास कर रहा है (एक खाली वस्तु बनाता है)।

तो कैसे एक File ऑब्जेक्ट क्लोन करता है?

https://developer.mozilla.org/en-US/docs/Web/API/File#Implementation_notes

जो अपने आप Blob का एक विस्तार है:

https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob

let file = event.target.files[0]; 
if (this.props.distro) { 
    const name = 'new-name-here' + // Concat with file extension. 
     file.name.substring(file.name.lastIndexOf('.')); 
    // Instantiate copy of file, giving it new name. 
    file = new File([file], name, { type: file.type }); 
} 

नोट File() को पहले तर्क एक होना चाहिए

उत्तर

8

मेरे समाधान File निर्माता में निहित है सरणी, बस मूल फ़ाइल नहीं।

+0

हाँ, यह धन्यवाद काम करता है। – Jazzy

3

आप FormData.prototype.append() का उपयोग कर सकते हैं, जो Blob को File ऑब्जेक्ट में भी परिवर्तित करता है।

let file = event.target.files[0]; 
let data = new FormData(); 
data.append("file", file, file.name); 
let _file = data.get("file"); 
संबंधित मुद्दे