以下是关于在DevEco Studio中处理图片上传、相册操作及文件上传的详细方法:

1.图片上传与相册操作

在鸿蒙应用中实现图片上传需调用媒体库和文件管理接口。以下为关键代码示例:

// 1. 从相册选择图片
private void pickImageFromGallery() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_PICK);
    startAbilityForResult(intent, REQUEST_CODE_PICK_IMAGE);
}

// 2. 处理返回的图片URI
@Override
protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) {
    if (requestCode == REQUEST_CODE_PICK_IMAGE && resultCode == RESULT_OK) {
        Uri selectedImageUri = resultData.getUri();
        // 将图片拷贝至应用沙箱
        copyToSandbox(selectedImageUri);
    }
}

2.拷贝图片到沙箱

需使用FileManagerFileAsset进行文件操作:

private void copyToSandbox(Uri sourceUri) {
    Context context = getContext();
    String sandboxPath = context.getFilesDir() + "/uploads/";
    File sandboxDir = new File(sandboxPath);
    if (!sandboxDir.exists()) {
        sandboxDir.mkdirs();
    }

    try {
        FileAsset sourceFile = FileAsset.open(context, sourceUri);
        FileAsset destFile = new FileAsset(sandboxPath + "upload_" + System.currentTimeMillis() + ".jpg");
        sourceFile.copy(destFile);
        uploadFile(destFile.getUri());
    } catch (IOException e) {
        HiLog.error(LABEL, "File copy failed: " + e.getMessage());
    }
}

3.文件上传实现

使用鸿蒙的HttpClient进行网络传输:

private void uploadFile(Uri fileUri) {
    HttpClient httpClient = new HttpClient();
    HttpRequest request = new HttpRequest(HttpMethod.POST, "https://api.example.com/upload");
    request.setHeader("Content-Type", "multipart/form-data");

    FileAsset fileAsset = FileAsset.open(getContext(), fileUri);
    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
    builder.addFilePart("file", fileAsset.getName(), fileAsset);

    request.setEntity(builder.build());
    httpClient.execute(request, new HttpCallback() {
        @Override
        public void onResponse(HttpResponse response) {
            if (response.getStatusCode() == 200) {
                HiLog.info(LABEL, "Upload successful");
            }
        }
    });
}

5.权限配置

config.json中添加必要权限:

{
  "reqPermissions": [
    {
      "name": "ohos.permission.READ_MEDIA"
    },
    {
      "name": "ohos.permission.WRITE_MEDIA"
    },
    {
      "name": "ohos.permission.INTERNET"
    }
  ]
}

注意事项

  • 鸿蒙文件系统操作需使用FileAsset而非Java原生File类
  • 大文件上传建议使用分片上传机制
  • 实际开发中需添加进度回调显示上传状态
  • 测试时确保设备已登录华为帐号并开启云调试功能

调试阶段可通过HiLog输出关键路径信息:

HiLog.debug(LABEL, "Sandbox path: %{public}s", getContext().getFilesDir());

以上方法组合可实现完整的图片选择、沙箱存储和网络上传流程。根据实际业务需求,可能需要调整HTTP请求头或添加文件压缩逻辑。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐