'URL' पर 'createObjectURL' निष्पादित करने में विफल:


132

सफारी में त्रुटि के नीचे प्रदर्शित करें।

'URL' पर 'createObjectURL' को निष्पादित करने में विफल: प्रदान किए गए हस्ताक्षर से मेल खाने वाला कोई फ़ंक्शन नहीं मिला।

मेरा कोड है:

function createObjectURL(object) {
    return (window.URL) ? window.URL.createObjectURL(object) : window.webkitURL.createObjectURL(object);
}

यह छवि के लिए मेरा कोड है:

function myUploadOnChangeFunction() { 
    if (this.files.length) { 
       for (var i in this.files) { 
           if (this.files.hasOwnProperty(i)) { 
              var src = createObjectURL(this.files[i]); 
              var image = new Image(); 
              image.src = src; 
              imagSRC = src; 
              $('#img').attr('src', src); 
            }
       }           
   } 
} 

6
createObjectURL(...)जब आप उस त्रुटि को प्राप्त करते हैं, तो हार्दिक, आप अपने कार्य में क्या कर रहे हैं ?
आर्थर वेबॉर्ग

2
ऑब्जेक्ट फ़ाइल ऑब्जेक्ट या ब्लॉब ऑब्जेक्ट होना चाहिए। ऑब्जेक्ट URL बनाने के लिए। we devdocs.io/dom/window.url.createobjecturl
yxf

1
यह मेरी कोड छवि के लिए है: फ़ंक्शन myUploadOnChangeFunction () {if (this.files.length) {for (var i in this.files) {if (this.files.hasOwnProperty (i)) {var src = createObjectURL (यह)। फ़ाइलों [i]); var छवि = नई छवि (); image.src = src; इमेजएसआरसी = src; $ ('# img')। attr ('src', src); }}}}
हार्दिक मंडनका

@HardikMansaraa आगे बढ़ो और अपने प्रश्न में संपादित करें।
soktinpk

window.URL.createObjectURL('broken')एक त्रुटि फेंकता है:Uncaught TypeError: Failed to execute 'createObjectURL' on 'URL': No function was found that matched the signature provided.
जुआन मेंडेस

जवाबों:


150

अपडेट करें

createObjectURL()विधि से बचने पर विचार करें , जबकि ब्राउज़र इसके लिए समर्थन अक्षम कर रहे हैं। जैसे उदाहरण तत्व MediaStreamकी srcObjectसंपत्ति में सीधे ऑब्जेक्ट संलग्न करें ।HTMLMediaElement<video>

const mediaStream = new MediaStream();
const video = document.getElementById('video-player');
video.srcObject = mediaStream;

हालाँकि, अगर आपको इसके साथ काम करने की आवश्यकता है MediaSource, Blobया File, आपको इसके साथ एक URL बनाना होगा URL.createObjectURL()और उसे असाइन करना होगा HTMLMediaElement.src

यहाँ और अधिक विवरण पढ़ें: https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/srcObject


पुराना उत्तर

मैंने उसी त्रुटि का अनुभव किया, जब मैं createObjectURLकच्चे डेटा से गुज़रा :

window.URL.createObjectURL(data)

यह होना चाहिए Blob, Fileया MediaSourceवस्तु, डेटा ही नहीं। यह मेरे लिए काम किया:

var binaryData = [];
binaryData.push(data);
window.URL.createObjectURL(new Blob(binaryData, {type: "application/zip"}))

अधिक जानकारी के लिए MDN भी देखें : https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL


2
नमस्ते .. अगर मैं "एप्लिकेशन / पीडीएफ" के साथ काम कर रहा हूं तो मुझे क्या करना चाहिए? जब मैं पीडीएफ फाइल के साथ काम कर रहा हूं, तो मुझे कंसोल पर वही त्रुटि मिल रही है
एन शर्मा

@ मिमो मैं फ़ाइल डाउनलोड करने के लिए समान कोड का उपयोग कर रहा हूं। लेकिन दो फाइलें डाउनलोड हो रही हैं। एक सही फ़ाइल और एक ही नाम वाली एक अतिरिक्त फ़ाइल है लेकिन विफल स्थिति डाउनलोड हो रही है। क्या आपको पता है कि ऐसा क्यों हो रहा है?
शार्दुल

मैं इस टिप्पणी से भ्रमित हूं, एमडीएन में यह URL.createObjectURL()मीडिया स्ट्रीम के लिए उपयोग को हतोत्साहित करता है। हालाँकि यह प्रारंभिक प्रश्न में बताई गई फ़ाइल इनपुट के लिए इसका उपयोग करने के लिए नहीं बताता है।
एलेक्स्ट्रास्टरो

140

यह त्रुटि इसलिए हुई है क्योंकि फ़ंक्शन createObjectURLGoogle Chrome के लिए पदावनत है

मैंने इसे बदल दिया:

video.src=vendorUrl.createObjectURL(stream);
video.play();

इसके लिए:

video.srcObject=stream;
video.play();

इसने मेरे लिए काम किया।



createObjectURL को यहां दिखाए गए अनुसार नहीं दर्शाया गया है लेकिन अब मीडिया स्ट्रीम ऑब्जेक्ट को स्वीकार नहीं करता है
goodies4uall

इसका उत्तर होना चाहिए।
डोमिंगो 10

एक और समस्या है video.play () प्रतिबंधित लगता है: DOMException: play () केवल एक उपयोगकर्ता के इशारे से शुरू किया जा सकता है।
user889030

@ user889030 जिसका अर्थ है कि आप एक वेबपेज नहीं खोल सकते हैं और वेब कैमरा स्ट्रीम शुरू होने की उम्मीद करते हैं। आपको उपयोगकर्ता को स्पष्ट रूप से स्ट्रीम शुरू करने देना होगा। बस स्ट्रीम शुरू करने के लिए एक बटन का उपयोग करें
S.Ramjit

26

मेरा कोड टूट गया था क्योंकि मैं एक पदावनत तकनीक का उपयोग कर रहा था। यह यह हुआ करता था:

video.src = window.URL.createObjectURL(localMediaStream);
video.play();

फिर मैंने इसे इस के साथ बदल दिया:

video.srcObject = localMediaStream;
video.play();

जो खूबसूरती से काम किया।

EDIT: हाल ही localMediaStreamमें पदावनत किया गया और उसके साथ बदल दिया गया MediaStream। नवीनतम कोड इस तरह दिखता है:

video.srcObject = MediaStream;

संदर्भ:

  1. पदावनत तकनीक: https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL
  2. आधुनिक पदावनत तकनीक: https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/srcObject
  3. आधुनिक तकनीक: https://developer.mozilla.org/en-US/docs/Web/API/MediaStream

9

मैं मीडियास्ट्रीम के लिए एक ही त्रुटि थी। समाधान srcObject के लिए एक स्ट्रीम सेट है।

से डॉक्स :

महत्वपूर्ण: यदि आपके पास अभी भी कोड है जो मीडिया तत्वों में स्ट्रीम संलग्न करने के लिए createObjectURL () पर निर्भर करता है, तो आपको सीधे मीडियास्ट्रीम में सीधे srcObject सेट करने के लिए अपना कोड अपडेट करना होगा।



3

समस्या यह है कि लूप में प्रदान की गई कुंजी फाइल के सूचकांक को संदर्भित नहीं करती है।

for (var i in this.files) {
    console.log(i);
}

उपरोक्त कोड का आउटपुट है:

0
length
item

लेकिन क्या उम्मीद थी:

0
1
2
etc...

तब त्रुटि तब होती है जब ब्राउज़र निष्पादित करने की कोशिश करता है, उदाहरण के लिए:

window.URL.createObjectURL(this.files["length"])

मैं निम्नलिखित कोड के आधार पर कार्यान्वयन का सुझाव देता हूं:

var files = this.files;
for (var i = 0; i < files.length; i++) {
    var file = files[i],
        src = (window.URL || window.webkitURL).createObjectURL(file);
    ...
}

मुझे उम्मीद है कि यह किसी की मदद कर सकता है।

अभिवादन!


1

यदि आप अजाक्स का उपयोग कर रहे हैं, तो विकल्पों को जोड़ना संभव है xhrFields: { responseType: 'blob' }:

$.ajax({
  url: 'yourURL',
  type: 'POST',
  data: yourData,
  xhrFields: { responseType: 'blob' },
  success: function (data, textStatus, jqXHR) {
    let src = window.URL.createObjectURL(data);
  }
});

-6

मैंने इसे GgitHub GitHub url से नवीनतम संस्करण डाउनलोड करने का निर्णय लिया

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.