HarmonyOS 分享文件时点击分享面板操作区中的‘另存为’按钮,文件另存为到文件夹之后,显示是0kb,该如何解决?

  1. 分享时使用的文件URI对应的文件在应用沙箱目录中不存在。分享时需要确保待分享的文件已存在应用沙箱目录内;

  2. 发起分享时SharedData中uri属性的值传入错误,比如未传入文件的uri,而是传入的文件的路径;

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

将文件路径转为文件的URI----fileUri.getUriFromPath(filePath),参考代码如下:

import { common } from '@kit.AbilityKit';
import { systemShare } from '@kit.ShareKit';
import { uniformTypeDescriptor as utd } from '@kit.ArkData';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { fileIo as fs, fileUri } from '@kit.CoreFileKit';
import { promptAction } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct HwSharePage {
  @State shareText: string = '新建TXT文件分享';
  @State sharePdfFile: string = '资源文件PDF文件分享';

  startSharePDF() {
    let filePath = getContext().filesDir + '/test.pdf';
    //读取app中的资源文件
    getContext()
      .resourceManager
      .getMediaContent($r("app.media.TestFile"), (error: BusinessError, value: Uint8Array) => {
        if (error != null) {
          hilog.debug(0x0000, "testTag", "文件转存失败: " + error.code + " ; " + error.message)
          return
        }
        //将读取的资源文件写入应用沙箱目录
        let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
        fs.writeSync(file.fd, value.buffer)
        fs.closeSync(file)
        //开始分享
        let shareData: systemShare.SharedData = new systemShare.SharedData({
          utd: utd.UniformDataType.PDF,
          label: utd.UniformDataType.FILE,
          uri: fileUri.getUriFromPath(filePath),
          title: 'pdf文件', // 不传title字段时,显示视频文件名
          description: 'pdf文件描述', // 不传description字段时,显示视频大小
        });
        let controller: systemShare.ShareController = new systemShare.ShareController(shareData);
        // 监听分享面板关闭事件
        controller.on('dismiss', () => promptAction.showToast({ message: 'Share panel disappeared' }));
        let context = getContext(this) as common.UIAbilityContext;
        controller.show(context, {
          previewMode: systemShare.SharePreviewMode.DEFAULT
          // excludedAbilities:[2]
        });
      })
  }

  startShareText() {
    let filePath = getContext().filesDir + "/测试文件.txt"
    let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
    fs.writeSync(file.fd, "你好,世界");
    fs.closeSync(file);
    hilog.debug(0x0000, "testTag", "TXT文件数据创建并写入成功")

    let data = new systemShare.SharedData({
      utd: utd.UniformDataType.FILE,
      uri: fileUri.getUriFromPath(filePath)
    })
    let controller = new systemShare.ShareController(data);
    let context = getContext(this) as common.UIAbilityContext;
    controller.show(context, {
      previewMode: systemShare.SharePreviewMode.DETAIL,
      selectionMode: systemShare.SelectionMode.SINGLE
    })
  }

  build() {
    Row() {
      Column() {
        Button(this.shareText)
          .onClick(() => {
            this.startShareText()
          })
        Button(this.sharePdfFile)
          .margin({ top: 10 })
          .onClick(() => {
            this.startSharePDF()
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS 下载文件指定文件夹
175浏览 • 1回复 待解决
分享沙箱文件,应用可分享单个文件
1241浏览 • 1回复 待解决
如何打开指定文件夹,选择文件返回
8928浏览 • 1回复 待解决
ATS如何判断路径文件夹还是文件
750浏览 • 1回复 待解决
HarmonyOS 文件分享问题
196浏览 • 1回复 待解决
HarmonyOS 文件分享如何指定应用
248浏览 • 1回复 待解决
HarmonyOS 系统分享文件
283浏览 • 1回复 待解决
打包包含ohosTest文件夹和test文件夹
731浏览 • 1回复 待解决