서버에 파일을 저장하지 않고 다른 클라이언트 브라우저로 파일을 전송해야합니다 .js) HTML5 및 File API로 어떻게 할 수 있습니까?html5 및 File API를 사용하여 서버 (node.js)에 파일을 저장하지 않고 한 클라이언트 브라우저에서 다른 클라이언트 브라우저로 파일을 전송하는 방법
실제로 용액 구현 :
최종 solutionlooks을이 같은
파일 어레이는 키 기억 파일 객체를 포함하는 클라이언트 입력으로부터 파일을 가져 [TYPE = 파일] 시드에 . slice/mozSlice 메서드를 사용하여 청크를 분할하면 Object.slice가 Blob 객체를 반환합니다.
FileReader 사용 Blob은 원시 이진 데이터 또는 base64 인코딩 된 데이터로 읽을 수 있습니다. FileReader는 base64로 읽기위한 readAsDataURL (blob)과 원시 이진 데이터로 읽기위한 readAsBinaryString (blob)을 구현합니다. BLOB에서 읽은 데이터에 액세스하려면 'onloadend'FileReader 이벤트를 참조하십시오.
인코딩 된 데이터가 socket.io를 통해 전송되는
- 당신은 정확히 같은 크기의 덩어리를 얻을 수있는 위치를 정지/청크 크기 (* 64 일반적으로 1024)와 다음 슬라이스 시작에 따라 청크 수를 계산하는 로직을 구현해야
유일한 서버 측 로직이 수신 된 데이터를 socket.io를 통해 연결된 배에 보내야하는 node.js
가장 흥미로운 점은 모든 청크를 배의 클라이언트 브라우저에서 BLOB로 함께 가져 오는 것입니다. 원시 이진 데이터에서 BLOB를 만들면 잘못된 BLOB 크기가 발생하고 잘못된 결과가 발생합니다. 이것이 seeder에서 base64로 인코딩 된 데이터를 전송하는 이유입니다.
디코딩 자체가 구현해야하므로 디코딩이 문제가 될 수 있습니다.function decode64 (data) { var mimeString = data.split(',')[0].split(':')[1].split(';')[0], // remove all chars before ',' byteString = atob(data.split(',')[1]), // if BlobBuilder available ab = new ArrayBuffer(byteString.length), ia = new Uint8Array(ab); for (var i = 0; i < byteString.length; i++) { ia[i] = byteString.charCodeAt(i); } blob = new Blob([ia], {'type' : (mimeString) }); return blob; }
방금 찾았 으면 읽는 것이 좋습니다. http://googleblog.blogspot.sg/2013/02/race-to-win-on-big-and-small-screens.html –
이것은 해결책이있는 훌륭한 질문입니다! 나는 이런 식으로 길고 열심히 찾고 있었다. 릴레이없이 피어 - 투 - 피어를 전송할 수 있었습니까? 나는 당신이 작성한 코드의 복사본을 얻을 수있는 기회가 있는지 궁금합니다. (민감하지 않은 경우?) 그것은 엄청난 도움이 될 것입니다. –
또한 5에서 여전히 서버에 데이터를 보내고 있습니다. 다른 피어에게 직접적으로, 대역폭 (잠재적으로 톤)을 소비합니다. 어떻게 그 주변을 얻었습니까? 덕분에 –