• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Class (WebHttpBodyStream)
2<!--Kit: ArkWeb-->
3<!--Subsystem: Web-->
4<!--Owner: @aohui-->
5<!--Designer: @yaomingliu-->
6<!--Tester: @ghiker-->
7<!--Adviser: @HelloCrease-->
8
9POST、PUT请求的数据体,支持BYTES、FILE、BLOB、CHUNKED类型的数据。注意本类中其他接口需要在[initialize](#initialize12)成功后才能调用。
10
11> **说明:**
12>
13> - 本模块首批接口从API version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
14>
15> - 本Class首批接口从API version 12开始支持。
16>
17> - 示例效果请以真机运行为准,当前DevEco Studio预览器不支持。
18
19## 导入模块
20
21```ts
22import { webview } from '@kit.ArkWeb';
23```
24
25## initialize<sup>12+</sup>
26
27initialize(): Promise\<void\>
28
29初始化WebHttpBodyStream。
30
31**系统能力:** SystemCapability.Web.Webview.Core
32
33**返回值:**
34
35| 类型   | 说明                      |
36| ------ | ------------------------- |
37| Promise\<void\> | Promise实例,用于获取WebHttpBodyStream是否初始化成功。 |
38
39**错误码:**
40
41以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
42
43| 错误码ID | 错误信息                              |
44| -------- | ------------------------------------- |
45| 17100022 | Failed to initialize the HTTP body stream. |
46
47**示例:**
48
49```ts
50// xxx.ets
51import { webview } from '@kit.ArkWeb';
52import { BusinessError } from '@kit.BasicServicesKit';
53import { buffer } from '@kit.ArkTS';
54import { WebNetErrorList } from '@ohos.web.netErrorList'
55
56@Entry
57@Component
58struct WebComponent {
59  controller: webview.WebviewController = new webview.WebviewController();
60  schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler();
61  htmlData: string = "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>";
62
63  build() {
64    Column() {
65      Button('postUrl')
66        .onClick(() => {
67          try {
68            let postData = buffer.from(this.htmlData);
69            this.controller.postUrl('https://www.example.com', postData.buffer);
70          } catch (error) {
71            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
72          }
73        })
74      Web({ src: 'https://www.example.com', controller: this.controller })
75        .onControllerAttached(() => {
76          try {
77            this.schemeHandler.onRequestStart((request: webview.WebSchemeHandlerRequest, resourceHandler: webview.WebResourceHandler) => {
78              console.info("[schemeHandler] onRequestStart");
79              try {
80                let stream = request.getHttpBodyStream();
81                if (stream) {
82                  stream.initialize().then(() => {
83                    if (!stream) {
84                      return;
85                    }
86                    console.info("[schemeHandler] onRequestStart postDataStream size:" + stream.getSize());
87                    console.info("[schemeHandler] onRequestStart postDataStream position:" + stream.getPosition());
88                    console.info("[schemeHandler] onRequestStart postDataStream isChunked:" + stream.isChunked());
89                    console.info("[schemeHandler] onRequestStart postDataStream isEof:" + stream.isEof());
90                    console.info("[schemeHandler] onRequestStart postDataStream isInMemory:" + stream.isInMemory());
91                    stream.read(stream.getSize()).then((buffer) => {
92                      if (!stream) {
93                        return;
94                      }
95                      console.info("[schemeHandler] onRequestStart postDataStream readlength:" + buffer.byteLength);
96                      console.info("[schemeHandler] onRequestStart postDataStream isEof:" + stream.isEof());
97                      console.info("[schemeHandler] onRequestStart postDataStream position:" + stream.getPosition());
98                    }).catch((error: BusinessError) => {
99                      console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
100                    })
101                  }).catch((error: BusinessError) => {
102                    console.error(`ErrorCode: ${error.code},  Message: ${error.message}`);
103                  })
104                } else {
105                  console.info("[schemeHandler] onRequestStart has no http body stream");
106                }
107              } catch (error) {
108                console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
109              }
110
111              return false;
112            })
113
114            this.schemeHandler.onRequestStop((request: webview.WebSchemeHandlerRequest) => {
115              console.info("[schemeHandler] onRequestStop");
116            });
117
118            this.controller.setWebSchemeHandler('https', this.schemeHandler);
119          } catch (error) {
120            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
121          }
122        })
123        .javaScriptAccess(true)
124        .domStorageAccess(true)
125    }
126  }
127}
128
129```
130
131## read<sup>12+</sup>
132
133read(size: number): Promise\<ArrayBuffer\>
134
135读取WebHttpBodyStream中的数据。
136
137**系统能力:** SystemCapability.Web.Webview.Core
138
139**参数:**
140
141| 参数名   | 类型    |  必填  | 说明                       |
142| --------| ------- | ---- | ---------------------------|
143|  size | number | 是   | 读取WebHttpBodyStream中的字节数。 |
144
145**返回值:**
146
147| 类型   | 说明                      |
148| ------ | ------------------------- |
149| Promise\<ArrayBuffer\> | Promise实例,用于获取WebHttpBodyStream中读取的数据。 |
150
151**错误码:**
152
153以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
154
155| 错误码ID | 错误信息                              |
156| -------- | ------------------------------------- |
157|  401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.    |
158
159**示例:**
160
161完整示例代码参考[initialize](#initialize12)。
162
163## getSize<sup>12+</sup>
164
165getSize(): number
166
167获取WebHttpBodyStream中的数据大小,分块传输时总是返回零。
168
169**系统能力:** SystemCapability.Web.Webview.Core
170
171**返回值:**
172
173| 类型   | 说明                      |
174| ------ | ------------------------- |
175| number | 获取WebHttpBodyStream中的数据大小。 |
176
177**示例:**
178
179完整示例代码参考[initialize](#initialize12)。
180
181## getPosition<sup>12+</sup>
182
183getPosition(): number
184
185读取WebHttpBodyStream中当前的读取位置。
186
187**系统能力:** SystemCapability.Web.Webview.Core
188
189**返回值:**
190
191| 类型   | 说明                      |
192| ------ | ------------------------- |
193| number | WebHttpBodyStream中当前的读取位置。 |
194
195**示例:**
196
197完整示例代码参考[initialize](#initialize12)。
198
199## isChunked<sup>12+</sup>
200
201isChunked(): boolean
202
203WebHttpBodyStream是否采用分块传输。
204
205**系统能力:** SystemCapability.Web.Webview.Core
206
207**返回值:**
208
209| 类型   | 说明                      |
210| ------ | ------------------------- |
211| boolean | WebHttpBodyStream是否采用分块传输,如果采用分块传输则返回true,否则返回false。 |
212
213**示例:**
214
215完整示例代码参考[initialize](#initialize12)。
216
217## isEof<sup>12+</sup>
218
219isEof(): boolean
220
221判断WebHttpBodyStream中的所有数据是否都已被读取。
222
223**系统能力:** SystemCapability.Web.Webview.Core
224
225**返回值:**
226
227| 类型   | 说明                      |
228| ------ | ------------------------- |
229| boolean | WebHttpBodyStream中的所有数据是否都已被读取。<br>如果所有数据都已被读取,则返回true。对于分块传输类型的WebHttpBodyStream,在第一次读取尝试之前返回false。 |
230
231**示例:**
232
233完整示例代码参考[initialize](#initialize12)。
234
235## isInMemory<sup>12+</sup>
236
237isInMemory(): boolean
238
239判断WebHttpBodyStream中的上传数据是否在内存中。
240
241**系统能力:** SystemCapability.Web.Webview.Core
242
243**返回值:**
244
245| 类型   | 说明                      |
246| ------ | ------------------------- |
247| boolean | WebHttpBodyStream中的上传数据是否在内存中。<br>如果WebHttpBodyStream中的上传数据完全在内存中,并且所有读取请求都将同步成功,则返回true。对于分块传输类型的数据,预期返回false。 |
248
249**示例:**
250
251完整示例代码参考[initialize](#initialize12)。