|
@@ -1,23 +1,23 @@
|
1
|
|
-# react-native-fetch-blob [](https://www.npmjs.com/package/react-native-fetch-blob)  []() []()
|
|
1
|
+# react-native-fetch-blob [](https://www.npmjs.com/package/react-native-fetch-blob)  []() [](https://github.com/wkh237/react-native-fetch-blob/milestones)
|
2
|
2
|
|
3
|
3
|
A module provides upload, download, and files access API. Supports file stream read/write for process large files.
|
4
|
4
|
|
5
|
5
|
**Why do we need this**
|
6
|
6
|
|
7
|
|
-React Native does not support `Blob` object at this moment, which means if you're going to send/receive binary data via `fetch` API, that might not work as you expect. See [[fetch] Does fetch with blob() marshal data across the bridge?](https://github.com/facebook/react-native/issues/854).
|
|
7
|
+React Native does not support `Blob` object at this moment, which means if you're going to send/receive binary data via `fetch` API, that might not work as you expect. See [facebook/react-native#854](https://github.com/facebook/react-native/issues/854).
|
8
|
8
|
|
9
|
9
|
For some use cases, you might get into trouble. For example, displaying an image that requires a specific field in headers (ex. "Authorization : Bearer ...") or body, so you can't just pass the image uri to `Image` component because that will probably returns a 401 response. Or you're going to upload binary data which generated from JS, the server will get an empry body due to [this issue](https://github.com/facebook/react-native/issues/854). With help of APIs provided by this module, you can send HTTP request with any headers, and decide how to handle the response/reqeust data without worry about if it is not supported by `fetch` API. The response data can be just simply converted into BASE64 string, or stored to a file directly so that you can read it by using file access APIs such as readFile, readStream.
|
10
|
10
|
|
11
|
11
|
This module was designed to be a substitution of `Blob`, there's a set of APIs including basic file system CRUD method, and file stream reader/writer. Also it has a special `fetch` implementation that supports binary request/response body.
|
12
|
12
|
|
13
|
|
-**Pre v0.5.0 Users**
|
|
13
|
+**Backward Compatible**
|
14
|
14
|
|
15
|
|
-All updates are `backward-compatible` generally you don't have to change existing code unless you're going to use new APIs. In latest version (v0.5.0), new APIs can either `upload` or `download` files simply using a file path. It's much more memory efficent in some use case. We've also introduced `fs` APIs for access files, and `file stream` API that helps you read/write files (especially for **large ones**), see [Examples](#user-content-usage) bellow. This module implements native methods, supports both Android (uses awesome native library [AsyncHttpClient](https://github.com/AsyncHttpClient/async-http-client])) and IOS.
|
|
15
|
+All updates are `backward-compatible` generally you don't have to change existing code unless you're going to use new APIs. But we recommend pre `0.5.0` users consider upgrade the package to latest version, since we have introduced new APIs can either `upload` or `download` files simply using a file path. It's much more memory efficent in some use case. We've also introduced `fs` APIs for access files, and `file stream` API that helps you read/write files (especially for **large ones**), see [Examples](#user-content-usage) bellow. This module implements native methods, supports both Android (uses awesome native library [AsyncHttpClient](https://github.com/AsyncHttpClient/async-http-client])) and IOS.
|
16
|
16
|
|
17
|
17
|
## TOC
|
18
|
18
|
|
19
|
19
|
* [Installation](#user-content-installation)
|
20
|
|
-* [Guide](#user-content-guide)
|
|
20
|
+* [Recipes](#user-content-guide)
|
21
|
21
|
* [Download file](#user-content-download-example--fetch-files-that-needs-authorization-token)
|
22
|
22
|
* [Upload file](#user-content-upload-example--dropbox-files-upload-api)
|
23
|
23
|
* [Multipart/form upload](#user-content-multipartform-data-example--post-form-data-with-file-and-data)
|
|
@@ -79,7 +79,7 @@ Also, if you're going to use `Android Download Manager` you have to add this to
|
79
|
79
|
|
80
|
80
|
Beginning in Android 6.0 (API level 23), users grant permissions to apps while the app is running, not when they install the app. So adding permissions in `AndroidManifest.xml` won't work in Android 6.0 devices. To grant permissions in runtime, you might use modules like [react-native-android-permissions](https://github.com/lucasferreira/react-native-android-permissions).
|
81
|
81
|
|
82
|
|
-## Guide
|
|
82
|
+## Recipes
|
83
|
83
|
|
84
|
84
|
```js
|
85
|
85
|
import RNFetchBlob from 'react-native-fetch-blob'
|
|
@@ -423,7 +423,7 @@ When calling `readStream` method, you have to `open` the stream, and start to re
|
423
|
423
|
|
424
|
424
|
```js
|
425
|
425
|
let data = ''
|
426
|
|
-RNFetchBlob.readStream(
|
|
426
|
+RNFetchBlob.fs.readStream(
|
427
|
427
|
// encoding, should be one of `base64`, `utf8`, `ascii`
|
428
|
428
|
'base64',
|
429
|
429
|
// file path
|
|
@@ -450,7 +450,7 @@ RNFetchBlob.readStream(
|
450
|
450
|
When use `writeStream`, the stream is also opened immediately, but you have to `write`, and `close` by yourself.
|
451
|
451
|
|
452
|
452
|
```js
|
453
|
|
-RNFetchBlob.writeStream(
|
|
453
|
+RNFetchBlob.fs.writeStream(
|
454
|
454
|
PATH_TO_FILE,
|
455
|
455
|
// encoding, should be one of `base64`, `utf8`, `ascii`
|
456
|
456
|
'utf8',
|