나는 이 문제를 매우 물방울 uirl.
내가 찾고 있었다 '는 video 태그를 쉐퍼드도 src' 유튜브 비디오 'src' 는 다음과 같은 것을 발견했다.
src="blob:https://crap.crap"
Src 정보기술 (it) 을 롬폭 내가 문을 열고 '물방울' 비디오 제공했음 오류가 발생했습니다. # 39, t, 그 당시 내가 can& 열어보려면 https://partner. '작업' 태그이고, src 이게 어떻게 가능한가?
요구 사항:
물방울 url (ref [W3C] [1], 공식 이름) 또는 객체에는 url (참조. [매든] [2] 와 메서드 이름) 를 사용할 수 있는 물방울 또는 파일 객체에는.
>. src = " blob:https://crap.crap"; 내가 문을 열고 있는 url 의 물방울 롬폭 src >. 비디오 작업을 했지만, 이 오류가 제공했음 쉐퍼드도 can& # 39 t opem src >. 이것은 태그 어떻게 가능한가?
물방울 url 을 내부적으로 생성할지 브라우저를 사용할 수 있습니다. '로레비크리트로비치우를 ()' 만들 수 있는 물방울 또는 파일 객체에는 나중에 릴리즈됨 special reference to using '로라자레보크로비치우를 ()'. 이러한 url 에서 사용할 수 있는 단일 인스턴스에서는 이벤트여야만 로칼에서 브라우저와 같은 세션에서. (예: 생명을 페이지 / 문서).
>. 지정하십시오. 물방울 uirl? >. 사용되는 것이 왜?
Url 은 dtep 물방울 물방울 URL / 객체에는 활용될 수 있도록 프로토콜 및 파일 객체에는 셨으며 소스임을 다운로드하십시오 이진 데이터 링크 URL 같은 이미지로 등.
예를 들어, 이미지를 객체에는 않을 수 없는 것처럼 손을 기초형상 바이트입니다 데이터 뭘 할지 막막한데. 예를 들어 이미지 (있는 이진 데이터) 에 url 을 통해 로드되므로 필요합니다. 아무 것도 할 수 있는 소스로 URL 이 qic 필요합니다. 이진 데이터 업로드 후 다시 url 을 통해 경배하되 대신 사용하는 것이 좋습니다 추가 로컬 단계 통하지 않고 직접 서버를 통해 데이터를 액세스할 수 있습니다.
또 더 좋은 대안이 될 수 있는 문장열 데이터 uri 인코딩됩니다 베이스 64. 각 챨 데이터 uri 문제가 있다는 데 2 바이트입니다 javascript 로. 그 위에 33% 가 추가된 베이스 64 인해 인코딩입니다. 바이너리 blob 갖지 않는 등 모든 중요한 오버헤드에 데이터 uri 바이트입니다 어레이에는 순결케 요소임 크기:, 더 빠르고 작은 처리할 수 있도록 하는 그들.
>. 물방울 uirl 서버에 직접 합니까?
아니, 물방울 url / 객체에는 브라운아저씨의 브라우저에 url 을 내부적으로 사용할 수 있습니다. 파일 API 를 통해 파일 개체 수 있으며, 물방울 물방울 만들 수 있지만 그냥 고말은 Binary Large OBject 및 바이트입니다 어레이에는 판독기에서 저장됩니다. 이 중 하나로 아라불퍼 Blob 데이터를 전송할 수 또는 클라이언트여야 요청할 수 있다. 순수 바이너리 데이터를 서버에서 데이터를 보내야 한다. 자주 사용하는 데이터베이스에 Blob (binary 개체에도 설명하기 위해, 또 우리는 기본적으로 바이트입니다 어레이에는 스토리지스코프는 대한 것이다.
>. 자세한 내용은 다음 경우
바이너리 BLOB 데이터를 사용할 수 있어야 합니다. () ',' 로 캡슐화합니다 객체에는 로레비크리트로비치우를 로컬 url 을 생성할 수 있다.
var blob = new Blob([arrayBufferWithPNG], {type: "image/png"}),
url = URL.createObjectURL(blob),
img = new Image();
img.onload = function() {
URL.revokeObjectURL(this.src); // clean-up memory
document.body.appendChild(this); // add image to DOM
}
img.src = url; // can now "stream" the bytes
참고 URL 에서 사용할 수 있는 '' 웹킷 브라우저 도왔으매 제작 기업이다.
var url = (URL || webkitURL).createObjectURL(...);
[1]: https://w3c.github.io/FileAPI/ # 데피니티오노프스체메 [2]: # 매개변수입니다 https://developer.mozilla.org/en-us/docs/web/api/url/createobjecturl
물방울 이제 막 바이트 순서. 그것을 바이트 스트림을 있지만브라우저에 있다. 바이트 스트림 소스에서 프레젠테이션이든 사용할 수 있다.
>. Blob 객체에는 제이보드 기초형상 데이터 파일 류 객체에는 수 있다. # 39 의 blob 데이터를 표현할 수 있는 것은, t isn& javascript 넷윈을 형식입니다. 물방울 물방울 기능을 확대하고, 이를 바탕으로 파일 인터페이스는 상속 user& # 39 에 대한 지원 파일 시스템.
네 가지 방법 (예: http://php.net/manual/en/function.ibase-blob-echo.php 시도하시겠습니까 승인하십시오 세르베랄 수 있습니다.
대한 자세한 정보
이 차이는 물방울 파일 API 와 자바스크립트 함수를 속셈도 표시하십시오 파일 API 를 JSON 데이터를 다운로드하십시오 클라이언트 브라우저:
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
/**
* Save a text as file using HTML <a> temporary element and Blob
* @author Loreto Parisi
*/
var saveAsFile = function(fileName, fileContents) {
if (typeof(Blob) != 'undefined') { // Alternative 1: using Blob
var textFileAsBlob = new Blob([fileContents], {type: 'text/plain'});
var downloadLink = document.createElement("a");
downloadLink.download = fileName;
if (window.webkitURL != null) {
downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
} else {
downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
downloadLink.onclick = document.body.removeChild(event.target);
downloadLink.style.display = "none";
document.body.appendChild(downloadLink);
}
downloadLink.click();
} else { // Alternative 2: using Data
var pp = document.createElement('a');
pp.setAttribute('href', 'data:text/plain;charset=utf-8,' +
encodeURIComponent(fileContents));
pp.setAttribute('download', fileName);
pp.onclick = document.body.removeChild(event.target);
pp.click();
}
} // saveAsFile
/* Example */
var jsonObject = {"name": "John", "age": 30, "car": null};
saveAsFile('out.json', JSON.stringify(jsonObject, null, 2));
끝 - < 스니핏 >;!
이 같은 함수가 호출될 사비아스필레 (& # 39,, # 39 out.json& 제슨슬링) ','. 또 브리트스트림 만들 수 있는 파일 API 를 사용하여 생성된 파일을 직접 다운로드하십시오 있지만브라우저에 인식되는 즉시 '로레비크리트로비치우를'.
이 같은 결과를 얻을 수 있는 ',' 다른 '요소' 를 통해 볼 수 있지만, 이 API 는 몇 가지 제한이 있는 Blob 데이터를 구성형 href apiu 않았습니다.
나는 수정되었음 모두 처리할 수 있는 작업 솔루션의 경우. 비디오 업로드됨 때 언제 이미지가 업로드됨. 희망을 일부 도움이 될 것입니다.
html < 입력입니다 유형 = " file";; id = " fileInput" >;; < div>; 기간: # 39, & # 39, id = 스팬할 <;;;; /span> sp& > < < div>.
Javascript
var fileEl = document.querySelector("input");
fileEl.onchange = function(e) {
var file = e.target.files[0]; // selected file
if (!file) {
console.log("nothing here");
return;
}
console.log(file);
console.log('file.size-' + file.size);
console.log('file.type-' + file.type);
console.log('file.acutalName-' + file.name);
let start = performance.now();
var mime = file.type, // store mime for later
rd = new FileReader(); // create a FileReader
if (/video/.test(mime)) {
rd.onload = function(e) { // when file has read:
var blob = new Blob([e.target.result], {
type: mime
}), // create a blob of buffer
url = (URL || webkitURL).createObjectURL(blob), // create o-URL of blob
video = document.createElement("video"); // create video element
//console.log(blob);
video.preload = "metadata"; // preload setting
video.addEventListener("loadedmetadata", function() { // when enough data loads
console.log('video.duration-' + video.duration);
console.log('video.videoHeight-' + video.videoHeight);
console.log('video.videoWidth-' + video.videoWidth);
//document.querySelector("div")
// .innerHTML = "Duration: " + video.duration + "s" + " <br>Height: " + video.videoHeight; // show duration
(URL || webkitURL).revokeObjectURL(url); // clean up
console.log(start - performance.now());
// ... continue from here ...
});
video.src = url; // start video load
};
} else if (/image/.test(mime)) {
rd.onload = function(e) {
var blob = new Blob([e.target.result], {type: mime}),
url = URL.createObjectURL(blob),
img = new Image();
img.onload = function() {
console.log('image');
console.dir('this.height-' + this.height);
console.dir('this.width-' + this.width);
URL.revokeObjectURL(this.src); // clean-up memory
console.log(start - performance.now());// add image to DOM
}
img.src = url;
};
}
var chunk = file.slice(0, 1024 * 1024 * 10); // .5MB
rd.readAsArrayBuffer(chunk); // read file object
};
이스피들 uirl