|
@@ -23,6 +23,7 @@ export default class Blob extends EventTarget {
|
23
|
23
|
type:string;
|
24
|
24
|
size:number;
|
25
|
25
|
isRNFetchBlobPolyfill:boolean = true;
|
|
26
|
+ multipartBoundary:string = null;
|
26
|
27
|
|
27
|
28
|
_ref:string = null;
|
28
|
29
|
_blobCreated:boolean = false;
|
|
@@ -84,14 +85,15 @@ export default class Blob extends EventTarget {
|
84
|
85
|
// process FormData
|
85
|
86
|
else if(data instanceof FormData) {
|
86
|
87
|
log.verbose('create Blob cache file from FormData', data)
|
87
|
|
- let boundary = `--RNFetchBlob-${this.cacheName}-${Date.now()}\r\n`
|
|
88
|
+ let boundary = `RNFetchBlob-${this.cacheName}-${Date.now()}`
|
|
89
|
+ this.multipartBoundary = boundary
|
88
|
90
|
let parts = data.getParts()
|
89
|
91
|
let formArray = []
|
90
|
92
|
for(let i in parts) {
|
91
|
|
- formArray.push(boundary)
|
|
93
|
+ formArray.push('\r\n--'+boundary+'\r\n')
|
92
|
94
|
let part = parts[i]
|
93
|
95
|
for(let j in part.headers) {
|
94
|
|
- formArray.push(j + part.headers[j] + ';\r\n')
|
|
96
|
+ formArray.push(j + ': ' +part.headers[j] + ';\r\n')
|
95
|
97
|
}
|
96
|
98
|
formArray.push('\r\n')
|
97
|
99
|
if(part.isRNFetchBlobPolyfill)
|
|
@@ -100,7 +102,7 @@ export default class Blob extends EventTarget {
|
100
|
102
|
formArray.push(part.string)
|
101
|
103
|
}
|
102
|
104
|
log.verbose('FormData array', formArray)
|
103
|
|
- formArray.push(boundary + '--')
|
|
105
|
+ formArray.push('\r\n--'+boundary+'--\r\n')
|
104
|
106
|
p = createMixedBlobData(this._ref, formArray)
|
105
|
107
|
}
|
106
|
108
|
// if the data is a string starts with `RNFetchBlob-file://`, append the
|
|
@@ -125,9 +127,13 @@ export default class Blob extends EventTarget {
|
125
|
127
|
else
|
126
|
128
|
data = data.toString()
|
127
|
129
|
// create cache file
|
|
130
|
+ this.type = String(this.type).replace(/;base64/ig, '')
|
128
|
131
|
log.verbose('create Blob cache file from string', 'encode', encoding)
|
129
|
132
|
p = fs.writeFile(this._ref, data, encoding)
|
130
|
|
- .then((size) => Promise.resolve(size))
|
|
133
|
+ .then((size) => {
|
|
134
|
+ console.log('file bytes', size)
|
|
135
|
+ return Promise.resolve(size)
|
|
136
|
+ })
|
131
|
137
|
|
132
|
138
|
}
|
133
|
139
|
// TODO : ArrayBuffer support
|
|
@@ -240,8 +246,9 @@ function createMixedBlobData(ref, dataArray) {
|
240
|
246
|
let size = 0
|
241
|
247
|
for(let i in dataArray) {
|
242
|
248
|
let part = dataArray[i]
|
243
|
|
- if(part instanceof Blob)
|
244
|
|
- args.push([ref, part.getRNFetchBlobRef(), 'uri'])
|
|
249
|
+ if(part.isRNFetchBlobPolyfill) {
|
|
250
|
+ args.push([ref, part._ref, 'uri'])
|
|
251
|
+ }
|
245
|
252
|
else if(typeof part === 'string')
|
246
|
253
|
args.push([ref, part, 'utf8'])
|
247
|
254
|
// TODO : ArrayBuffer
|