鴻蒙NEXT使用request模組實現本地檔案上傳

威哥爱编程發表於2025-01-06

大家好,我是 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)

    • uploadFileWithProxy 函式中,我們使用 request.agent.create 建立了一個自定義代理服務,代理地址由 proxyUrl 提供。
    • 該服務用於透過代理上傳檔案。
  2. 讀取本地檔案

    • readFile 函式讀取本地檔案內容。在這個示例中,我們假設上傳的是一個文字檔案。
    • 使用 fs.stat 檢查檔案是否存在,fs.readFile 獲取檔案內容。
  3. 上傳檔案

    • 使用 request.upload 發起檔案上傳請求,並且指定代理。
    • options 中的 url 為目標上傳地址,method 為 HTTP 請求方法(在此為 POST)。
    • 上傳檔案的資料作為 data 部分傳遞給伺服器。
  4. 日誌

    • 使用 Log 模組列印上傳過程的相關日誌資訊,幫助除錯和監控。

需要注意:

  • request.upload 方法是鴻蒙系統提供的用於上傳檔案的介面。確保傳遞正確的 options,包括檔案內容、上傳URL等。

  • 代理的地址透過 request.agent.create 設定,可以為HTTP請求指定一箇中間代理伺服器,尤其在網路受限或者有特殊需求時非常有用。

  • 需要正確配置伺服器端接收檔案的介面(如 POST 方法和表單資料處理)。

  • 將需要上傳的檔案路徑替換為你本地實際存在的檔案路徑(如 /data/files/example.txt)。

  • 確保伺服器端能夠處理來自代理伺服器的上傳請求。

  • 使用合適的 proxyUrl 進行自定義代理。

此示例提供了一個基礎框架,你可以根據實際需求擴充套件或修改功能,感謝支援,關注威哥愛程式設計,一起學鴻蒙開發。

相關文章