'URL'에서 'createObjectURL'을 (를) 실행하지 못했습니다.


132

Safari에서 아래 오류가 표시됩니다.

'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
안녕하세요 Hardik, createObjectURL(...)그 오류가 발생하면 무엇을 함수에 전달 합니까?
Arthur Weborg

2
객체는 객체를 생성 할 파일 개체 또는 Blob 오브젝트를해야 URL for.see devdocs.io/dom/window.url.createobjecturl
yxf를

1
이것은 이미지에 대한 내 코드입니다. function myUploadOnChangeFunction () {if (this.files.length) {for (this.files의 var i) {if (this.files.hasOwnProperty (i)) {var src = createObjectURL (this. 파일 [i]); var image = new Image (); image.src = src; imagSRC = src; $ ( '# img'). attr ( 'src', src); }}}}
Hardik Mandankaa

@HardikMansaraa 계속해서 질문에 편집하십시오.
soktinpk

window.URL.createObjectURL('broken')오류가 발생합니다 :Uncaught TypeError: Failed to execute 'createObjectURL' on 'URL': No function was found that matched the signature provided.
Juan Mendes

답변:


150

최신 정보

createObjectURL()브라우저가 메소드를 지원하지 않는 동안 메소드를 피 하십시오. 예를 들어 element MediaStreamsrcObject속성에 직접 객체를 연결하십시오 .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
Hi .. "application / pdf"를 다루는 경우 어떻게해야합니까? PDF 파일을 다룰 때 콘솔에서 동일한 오류가 발생합니다
N Sharma

@mimo 나는 동일한 코드를 사용하여 파일을 다운로드하고 있습니다. 그러나 두 파일이 다운로드되고 있습니다. 하나는 올바른 파일이고 동일한 이름을 가진 하나의 추가 파일이지만 실패한 상태가 다운로드됩니다. 왜 그런 일이 일어나고 있는지 아십니까?
Shardul

이 의견과 혼동되어 MDN에서는 URL.createObjectURL()미디어 스트림 사용을 권장하지 않습니다 . 그러나 초기 질문에서 언급 한대로 파일 입력에 사용하지 말라고 명시하지 않았습니다.
alextrastero

140

이 오류는 createObjectURLChrome 에서 기능 이 더 이상 사용되지 않기 때문에 발생합니다.

나는 이것을 바꿨다.

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

이에:

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

이것은 나를 위해 일했습니다.



createObjectURL은 여기에 표시된 것처럼 더 이상 사용되지 않지만 더 이상 미디어 스트림 객체를 허용하지 않습니다
goodies4uall

이것이 답이되어야합니다.
DomingoR

video.play ()가 제한되는 것처럼 보이는 또 다른 문제가 있습니다. DOMException : play ()는 사용자 제스처로만 시작할 수 있습니다.
user889030

@ user889030은 웹 페이지를 열 수없고 웹캠 스트림이 시작될 것으로 예상한다는 의미입니다. 사용자가 스트림을 명시 적으로 시작하도록해야합니다. 버튼을 사용하여 스트림을 시작하십시오
S.Ramjit

26

더 이상 사용되지 않는 기술을 사용했기 때문에 코드가 손상되었습니다. 예전에는

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

그런 다음 이것을 이것을 대체했습니다 :

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

그것은 아름답게 작동했습니다.

편집 : 최근 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

MediaStream에 대해 동일한 오류가 발생했습니다. 솔루션은 스트림을 srcObject로 설정합니다.

로부터 문서 :

중요 사항 : 미디어 요소에 스트림을 첨부하기 위해 createObjectURL ()에 의존하는 코드가 여전히 있으면 코드를 업데이트하여 srcObject를 MediaStream에 직접 설정하십시오.



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

ajax를 사용하는 경우 옵션을 추가 할 수 있습니다 xhrFields: { responseType: 'blob' }.

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.