鸿蒙 上传照片

package com.cmmboy.xzwp.ability;

import com.bumptech.glide.Glide;
import com.cmmboy.xzwp.ResourceTable;
import com.cmmboy.xzwp.bean.ImageBean;
import com.cmmboy.xzwp.net.RetrofitManagement;
import com.cmmboy.xzwp.net.Wan;
import com.cmmboy.xzwp.utils.LogUtils;
import ohos.aafwk.ability.DataAbilityHelper;
import ohos.aafwk.ability.DataAbilityRemoteException;
import ohos.aafwk.ability.fraction.FractionAbility;
import ohos.aafwk.content.Intent;
import ohos.aafwk.content.Operation;
import ohos.agp.components.*;
import ohos.agp.utils.Color;
import ohos.agp.window.service.Window;
import ohos.app.Context;
import ohos.data.resultset.ResultSet;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
import ohos.media.image.ImageSource;
import ohos.media.photokit.metadata.AVStorage;
import ohos.utils.net.Uri;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

import java.io.File;

import static ohos.bundle.IBundleManager.PERMISSION_GRANTED;


public class AboutAbility extends FractionAbility {
    static final HiLogLabel label = new HiLogLabel(HiLog.LOG_APP, 0x0001, "选择图片测试");
    Image image;
    private final int imgRequestCode = 1123;

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_about);
        Window window = getWindow();
        window.setStatusBarColor(Color.rgb(26, 159, 53));
        window.setStatusBarVisibility(Component.VISIBLE);
        Image backView = findComponentById(ResourceTable.Id_backView);
        Text title = findComponentById(ResourceTable.Id_title);
        title.setText("关于");
        backView.setClickedListener(component -> terminateAbility());

        image = findComponentById(ResourceTable.Id_test);

        //获取存储权限
        requestPermissionsFromUser(new String[]{"ohos.permission.READ_USER_STORAGE"}, imgRequestCode);


        image.setClickedListener(component -> {
            choosePic();
        });


    }

    /**
     * 权限回调
     *
     * @param requestCode  requestCode
     * @param ss           ss
     * @param grantResults grantResults
     */
    @Override
    public void onRequestPermissionsFromUserResult(int requestCode, String[] ss, int[] grantResults) {
        super.onRequestPermissionsFromUserResult(requestCode, ss, grantResults);
        if (requestCode != 0) {
            choosePic();
            return;
        }
        boolean isHavePermission = false;
        for (int num = 0; num < ss.length; num++) {
            isHavePermission = grantResults[num] == PERMISSION_GRANTED;
        }
        if (isHavePermission) {
            restart();
        }

    }

    private void choosePic() {
        Intent intent = new Intent();
        Operation opt = new Intent.OperationBuilder().withAction("android.intent.action.GET_CONTENT").build();
        intent.setOperation(opt);
        intent.addFlags(Intent.FLAG_NOT_OHOS_COMPONENT);
        intent.setType("image/*");
        startAbilityForResult(intent, imgRequestCode);
    }

    @Override
    protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) {

        if (resultData != null && requestCode == imgRequestCode) {
            //选择的Img对应的Uri
            String chooseImgUri = resultData.getUriString();
            HiLog.info(label, "选择图片getScheme:" + chooseImgUri.substring(chooseImgUri.lastIndexOf('/')));
            //定义数据能力帮助对象
            DataAbilityHelper helper = DataAbilityHelper.creator(getContext());
            //定义图片来源对象
            ImageSource imageSource = null;
            //获取选择的Img对应的Id
            String chooseImgId = null;
            //如果是选择文件则getUriString结果为content://com.android.providers.media.documents/document/image%3A30,其中%3A是":"的URL编码结果,后面的数字就是image对应的Id
            //如果选择的是图库则getUriString结果为content://media/external/images/media/30,最后就是image对应的Id
            //这里需要判断是选择了文件还是图库
            if (chooseImgUri.lastIndexOf("%3A") != -1) {
                chooseImgId = chooseImgUri.substring(chooseImgUri.lastIndexOf("%3A") + 3);
            } else {
                chooseImgId = chooseImgUri.substring(chooseImgUri.lastIndexOf('/') + 1);
            }
            //获取图片对应的uri,由于获取到的前缀是content,我们替换成对应的dataability前缀
            Uri uri = Uri.appendEncodedPathToUri(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI, chooseImgId);
            HiLog.info(label, "选择图片dataability路径:" + uri.toString()); //dataability:///media/external/images/media/57562


            Glide.with(AboutAbility.this)
                    .load(uri.toString())
                    .into(image);

            //  转换dataability:///media/external/images/media/30为/storage/emulated/0/DCIM/YIIoT/5769014/20220516162557036.jpg
            String imagePath = searchImages(AboutAbility.this, uri);
            HiLog.info(label, "选择图片imagePath路径:" + imagePath);
            getNewsNet(imagePath);
        }
    }

    // 转换dataability:///media/external/images/media/30为/storage/emulated/0/DCIM/YIIoT/5769014/20220516162557036.jpg
    private static String searchImages(Context context, Uri contentUri) {
        DataAbilityHelper helper = DataAbilityHelper.creator(context);
        ResultSet resultSet = null;
        try {
            resultSet = helper.query(contentUri, new String[]{AVStorage.Images.Media.ID, AVStorage.Images.Media.DISPLAY_NAME, AVStorage.Images.Media.DATA}, null);
            int columnIndexForName = resultSet.getColumnIndexForName(AVStorage.Images.Media.DATA);
            resultSet.goToFirstRow();
            return resultSet.getString(columnIndexForName);
        } catch (DataAbilityRemoteException e) {
            e.printStackTrace();
        } finally {
            if (resultSet != null) {
                resultSet.close();
            }
        }
        return null;
    }

    private void getNewsNet(String imgPath) {

        LogUtils.d("上传的文件名: " + imgPath);
        File file = new File(imgPath);

        RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), file);
        //参数添加
        MultipartBody.Builder builder = new MultipartBody.Builder()
                .setType(MultipartBody.FORM);
        builder.addFormDataPart("file", file.getName(), body);
        MultipartBody.Part part = builder.build().part(0);

        RetrofitManagement.getInstance().create(Wan.class).uploadFiles(part).enqueue(new Callback<ImageBean>() {
            @Override
            public void onResponse(Call<ImageBean> call, Response<ImageBean> response) {
                if (response.body().getCode() == 200) {
                    HiLog.info(label, "上传图片返回的数据===>" + response.body().getImgUrl());
                } else {

                }

            }

            @Override
            public void onFailure(Call<ImageBean> call, Throwable throwable) {

            }


        });
    }

}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值