Skip to content

Commit 46c69ad

Browse files
committed
1.0.0
1 parent 7ad2e05 commit 46c69ad

File tree

4 files changed

+17
-81
lines changed

4 files changed

+17
-81
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,14 @@ writer.write(uint8array)
9191
writer.close()
9292
```
9393

94-
### Read blob as a stream and pipe it
94+
### Read blob as a stream and pipe it (see: [Screw FileReader](https://www.npmjs.com/package/screw-filereader))
9595

9696
```javascript
97+
require('screw-filereader')
9798
const fileStream = streamSaver.createWriteStream('filename.txt')
9899
const blob = new Blob([ 'a'.repeat(1E9*5) ]) // 1*5 MB
99-
const blobStream = streamSaver.createBlobReader(blob)
100100

101-
blobStream.pipeTo(fileStream)
101+
blob.stream().pipeTo(fileStream)
102102
```
103103

104104
### Save a media stream

StreamSaver.js

Lines changed: 9 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@
1010
secure = location.protocol == 'https:' || location.hostname == 'localhost',
1111
streamSaver = {
1212
createWriteStream,
13-
createBlobReader,
1413
supported: false,
1514
version: {
16-
full: '0.2.1',
17-
major: 0, minor: 2, dot: 1
15+
full: '1.0.0',
16+
major: 1, minor: 0, dot: 0
1817
}
19-
},
20-
proxy = 'https://jimmywarting.github.io/StreamSaver.js/mitm.html?version=' +
21-
streamSaver.version.full
18+
}
19+
20+
streamSaver.mitm = 'https://jimmywarting.github.io/StreamSaver.js/mitm.html?version=' +
21+
streamSaver.version.full
2222

2323
try {
2424
// Some browser has it but ain't allowed to construct a stream yet
@@ -51,7 +51,7 @@
5151

5252
if(secure && !iframe) {
5353
iframe = document.createElement('iframe')
54-
iframe.src = proxy
54+
iframe.src = streamSaver.mitm
5555
iframe.hidden = true
5656
document.body.appendChild(iframe)
5757
}
@@ -71,7 +71,7 @@
7171
}
7272

7373
if(!secure) {
74-
popup = window.open(proxy, Math.random())
74+
popup = window.open(streamSaver.mitm, Math.random())
7575
let onready = evt => {
7676
if(evt.source === popup){
7777
popup.postMessage({filename, size}, '*', [channel.port2])
@@ -116,43 +116,5 @@
116116
}, queuingStrategy)
117117
}
118118

119-
// May want to have this as a seperate module...
120-
function createBlobReader(blob, queuingStrategy){
121-
// Could just do: stream = (new Response(blob)).body
122-
// but it's not fully developt yet
123-
// Any ides how to upgrade a `Reader` to a full ReadableByteStream?
124-
const DEFAULT_CHUNK_SIZE = 524288
125-
let position = 0
126-
127-
return new ReadableStream({
128-
type: 'bytes',
129-
autoAllocateChunkSize: DEFAULT_CHUNK_SIZE,
130-
131-
pull(controller) {
132-
const v = controller.byobRequest.view;
133-
134-
return new Promise((resolve, reject) => {
135-
let fr = new FileReader()
136-
fr.onload = evt => {
137-
let uint8array = new Uint8Array(fr.result)
138-
let bytesRead = uint8array.byteLength
139-
140-
position += bytesRead
141-
v.set(uint8array)
142-
controller.byobRequest.respond(bytesRead)
143-
144-
if(position >= blob.size)
145-
controller.close()
146-
147-
resolve()
148-
}
149-
150-
fr.readAsArrayBuffer(blob.slice(position, position + v.byteLength))
151-
})
152-
}
153-
}, queuingStrategy)
154-
}
155-
156119
return streamSaver
157-
158-
});
120+
})

example.html

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ <h3>What would you like to save?</h3>
2222
<input name="kind" value="text" type="radio" checked>Plain text (Save as you type)</label><br>
2323
<label><input name="kind" value="video" type="radio">Video stream</label><br>
2424
<label><input name="kind" value="audio" type="radio">Audio stream</label><br>
25-
<!-- <label><input name="kind" value="blob" type="radio">Pipe a blob: <code>new Blob(['aaaa bbb ccc']))</code></label><br> -->
26-
<!-- disabled until now, haven't had the time to write any demo using fetch -->
2725
<label><input name="kind" value="torrent" type="radio">Torrent</label><br>
2826
<label><input name="kind" value="fetch" type="radio">Fetch stream</label>
2927
- kind of cheesy, since you can use fetchEvent to add
@@ -46,6 +44,7 @@ <h3>What would you like to save?</h3>
4644
<script src="StreamSaver.js"></script>
4745
<script src="https://cdn.jsdelivr.net/webtorrent/latest/webtorrent.min.js"></script>
4846
<script src="https://rawgit.com/jimmywarting/browser-su/master/build/permissions.js"></script>
47+
<script src="https://rawgit.com/jimmywarting/browser-su/master/build/permissions.js"></script>
4948

5049
<!-- 1.2.2 -->
5150
<script src="https://cdn.rawgit.com/creatorrr/web-streams-polyfill/68f93d7240d925d27b175ce39133f57993c3f109/dist/polyfill.min.js"
@@ -80,13 +79,9 @@ <h3>What would you like to save?</h3>
8079
url = "https://d8d913s460fub.cloudfront.net/videoserver/cat-test-video-320x240.mp4",
8180
fileStream = streamSaver.createWriteStream(filename)
8281

83-
if(kind == 'blob') {
84-
$abort.onclick = event => fileStream.abort()
85-
} else {
86-
writer = fileStream.getWriter()
87-
$abort.onclick = event => writer.abort()
88-
$close.onclick = event => writer.close()
89-
}
82+
writer = fileStream.getWriter()
83+
$abort.onclick = event => writer.abort()
84+
$close.onclick = event => writer.close()
9085

9186
$form.remove()
9287
$abort.hidden = false
@@ -123,27 +118,6 @@ <h3>What would you like to save?</h3>
123118
break; case "screen":
124119
permission = {name: 'screen'}
125120
break;
126-
case "file":
127-
case "blob":
128-
var blob = new Blob([
129-
"a".repeat(1024),
130-
"b".repeat(1024),
131-
"c".repeat(1024)
132-
])
133-
134-
let stream = streamSaver.createBlobReader(blob)
135-
return stream.pipeTo(myFile)
136-
137-
// This is rather quite simple with fetch
138-
// cuz you can retrive an actual stream with it
139-
// Create a object url that you can request
140-
// then just fall into next "fetch case"
141-
url = URL.createObjectURL(blobOrFile)
142-
143-
// Alternetive method to get a blob to become a reader:
144-
// stream = (new Response(blob)).body
145-
// reader = stream.getReader()
146-
147121
case "fetch":
148122
// Here we could just simply open the link and then let
149123
// the SW add Content-Disposition header to that request.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "streamsaver",
3-
"version": "0.2.0",
3+
"version": "1.0.0",
44
"description": "StreamSaver writes stream to the filesystem directly - asynchronous",
55
"main": "StreamSaver.js",
66
"scripts": {

0 commit comments

Comments
 (0)