HarmonyOS鸿蒙Next中ohos/httpclient如何实现大文件的MultiPart/form-data文件流上传
HarmonyOS鸿蒙Next中ohos/httpclient如何实现大文件的MultiPart/form-data文件流上传 三方库版本:@ohos/httpclient@2.0.4
操作步骤:
- 视频文件, 大概300M
- 使用multipart/form-data 上传
- 监控上传进度
- 获取返回上传后的返回数据(比如文件的url地址)
目前采用官方的案例,需要读取文件到内存. 看能否提供基于文件流上传的MultiPart/form-data
// buffer 实际是读到内存的
const buffer = new ArrayBuffer()
let part = RequestBody.create(buffer,
new Mime.Builder()
.contentDisposition(`form-data; name="buffer";filename="test.mp4"`)
.contentType('video/mp4')
.build()
.getMime())
let multiPart: MultiPart = new MultiPart.Builder()
.type(MultiPart.FORMDATA)
.addPart(part)
.build()
let body: RequestBody = multiPart.createRequestBody();
let request: Request = new Request.Builder()
.url('http://www.baidu.com/upload') // 此处需要替换成实际上传服务器
.post(body)
.headers(headers) // 上传时headers
.addHeader('Content-Type', 'multipart/form-data')
.addHeader('connection', 'keep-alive')
.build()
const client = new HttpClient.Builder()
.setConnectTimeout(60, TimeUnit.SECONDS)
.setReadTimeout(60, TimeUnit.SECONDS)
.setWriteTimeout(60, TimeUnit.SECONDS).build()
client.newCall(request).execute().then(response => {
response.uploadTask.on('progress', (uploadedSize: number, totalSize: number) => {
console.log('Di-', 'progress--->uploadedSize: ' + uploadedSize + ' ,totalSize--->', totalSize);
if (uploadedSize == totalSize) {
console.log('Di-', '上传成功' )
}
})
response.uploadTask.on('headerReceive', (headers: object) => {
console.log('Di-', 'progress--->uploadSize: ' + JSON.stringify(headers));
const body = headers['body']
console.log('Di-', 'body--->', body)
})
})
更多关于HarmonyOS鸿蒙Next中ohos/httpclient如何实现大文件的MultiPart/form-data文件流上传的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS鸿蒙Next中ohos/httpclient如何实现大文件的MultiPart/form-data文件流上传的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,使用ohos/httpclient实现大文件的MultiPart/form-data文件流上传,可以通过以下步骤完成:
-
创建HttpClient实例: 使用
HttpClient.create()方法创建一个HttpClient实例。 -
构建MultipartEntity: 使用
MultipartEntityBuilder构建一个包含文件和其他表单数据的MultipartEntity。可以通过addBinaryBody方法添加文件,addTextBody方法添加文本字段。 -
设置请求头: 在请求头中设置
Content-Type为multipart/form-data,并指定boundary。 -
执行请求: 使用
HttpRequest对象设置请求方法为POST,并将MultipartEntity设置为请求体。然后通过HttpClient.execute()方法执行请求。 -
处理响应: 获取响应对象
HttpResponse,并处理响应状态码和响应体。
示例代码如下:
import http from '@ohos.net.http';
import fileio from '@ohos.fileio';
let httpClient = http.createHttp();
let filePath = 'path/to/your/largefile'; // 文件路径
let fileStream = fileio.createStream(filePath, 'r');
let multipartEntity = http.MultipartEntityBuilder.create()
.addBinaryBody('file', fileStream, 'application/octet-stream', 'largefile')
.addTextBody('field1', 'value1')
.build();
let request = http.createHttpRequest({
method: http.RequestMethod.POST,
url: 'https://example.com/upload',
header: {
'Content-Type': 'multipart/form-data; boundary=' + multipartEntity.getBoundary()
},
entity: multipartEntity
});
httpClient.execute(request, (err, response) => {
if (err) {
console.error('Error:', err);
} else {
console.log('Response status:', response.responseCode);
console.log('Response body:', response.result);
}
});

