写点什么

鸿蒙 NEXT 使用 request 模块实现本地文件上传

作者:威哥爱编程
  • 2025-01-06
    北京
  • 本文字数:1735 字

    阅读完需:约 6 分钟

大家好,我是 V 哥。在鸿蒙 NEXT API 12 中,可以使用 ohos.request 模块提供的上传接口将本地文件上传到服务器。自定义代理设置可以通过 request.agent.create 接口来实现,从而指定代理服务器的地址。下面是一个详细的案例代码,演示了如何使用自定义代理上传本地文件。整理好的学习笔记,分享给大家。

示例代码

import { request } from '@ohos.request';import { Log } from '@ohos.logger';import fs from '@ohos.fileSystem';
export default { data: { localFilePath: '/data/files/example.txt', // 需要上传的文件路径 serverUrl: 'https://example.com/upload', // 上传文件的服务器URL proxyUrl: 'http://proxy.example.com:8080', // 自定义代理地址 },
onInit() { // 在组件初始化时,触发上传文件的操作 this.uploadFileWithProxy(); },
async uploadFileWithProxy() { try { // 创建代理代理服务 const agent = await request.agent.create({ proxy: this.proxyUrl, // 设置自定义代理地址 }); Log.info('Custom proxy agent created successfully.');
// 读取本地文件 const fileData = await this.readFile(this.data.localFilePath); if (!fileData) { Log.error('Failed to read local file.'); return; }
// 准备上传请求的参数 const options = { url: this.data.serverUrl, // 目标上传URL method: 'POST', // HTTP方法为POST headers: { 'Content-Type': 'multipart/form-data', // 设置请求头 }, data: { file: fileData, // 上传的文件内容 }, agent, // 使用代理 };
// 发起文件上传请求 const response = await request.upload(options); if (response && response.status === 200) { Log.info('File uploaded successfully: ' + JSON.stringify(response)); } else { Log.error('File upload failed: ' + JSON.stringify(response)); } } catch (error) { Log.error('Error during file upload: ' + error.message); } },
// 读取本地文件内容的函数 async readFile(filePath: string) { try { // 读取本地文件 const fileStats = await fs.stat(filePath); if (!fileStats || !fileStats.isFile) { return null; // 文件不存在或不是一个文件 }
const fileData = await fs.readFile(filePath); return fileData; } catch (error) { Log.error('Error reading file: ' + error.message); return null; } },};
复制代码

解释:

  1. 代理服务创建 (request.agent.create)

  2. uploadFileWithProxy 函数中,我们使用 request.agent.create 创建了一个自定义代理服务,代理地址由 proxyUrl 提供。

  3. 该服务用于通过代理上传文件。

  4. 读取本地文件

  5. readFile 函数读取本地文件内容。在这个示例中,我们假设上传的是一个文本文件。

  6. 使用 fs.stat 检查文件是否存在,fs.readFile 获取文件内容。

  7. 上传文件

  8. 使用 request.upload 发起文件上传请求,并且指定代理。

  9. options 中的 url 为目标上传地址,method 为 HTTP 请求方法(在此为 POST)。

  10. 上传文件的数据作为 data 部分传递给服务器。

  11. 日志

  12. 使用 Log 模块打印上传过程的相关日志信息,帮助调试和监控。

需要注意:

  • request.upload 方法是鸿蒙系统提供的用于上传文件的接口。确保传递正确的 options,包括文件内容、上传 URL 等。

  • 代理的地址通过 request.agent.create 设置,可以为 HTTP 请求指定一个中间代理服务器,尤其在网络受限或者有特殊需求时非常有用。

  • 需要正确配置服务器端接收文件的接口(如 POST 方法和表单数据处理)。

  • 将需要上传的文件路径替换为你本地实际存在的文件路径(如 /data/files/example.txt)。

  • 确保服务器端能够处理来自代理服务器的上传请求。

  • 使用合适的 proxyUrl 进行自定义代理。


此示例提供了一个基础框架,你可以根据实际需求扩展或修改功能,感谢支持,关注威哥爱编程,一起学鸿蒙开发。

发布于: 刚刚阅读数: 4
用户头像

华为 HDE、CSDN 博客专家、Java畅销书作者 2018-05-30 加入

全栈领域优质创作者(Java/HarmonyOS/AI),公众号:威哥爱编程

评论

发布
暂无评论
鸿蒙NEXT使用request模块实现本地文件上传_鸿蒙_威哥爱编程_InfoQ写作社区