从uri获取图片文件的File对象

  1. 业务场景

    1. 需求: 复制一个模块, 该模块内容含有图片文件.
    2. 可提供的数据有: 该模块的相关信息(id等), 以及图片路径.
    3. 后台提供接口中, 需要传file字段.
  2. 知识储备

    1. xhr配置
    2. blob对象
    3. new File()方法
  3. 函数实现

//util.js

export function getImageFileFromUrl(url, imageName) {

  // imageName一定要带上后缀
  let p = new Promise((resolve, reject) => {
    var blob = null;
    var xhr = new XMLHttpRequest(); 
    xhr.open("GET", url);
    xhr.setRequestHeader('Accept', 'image/jpeg');
    xhr.responseType = "blob";
    xhr.onload = () => {
      blob = xhr.response;
      let imgFile = new File([blob], imageName, {type: 'image/jpeg'});
      resolve(imgFile);
    };
    xhr.send();
  });
  return p;
}

转载于:https://www.cnblogs.com/foxNike/p/7125234.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在拍照时获取图片uri,可以通过以下步骤实现: 1. 在AndroidManifest.xml文件添加文件提供器(FileProvider): ```xml <provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.fileProvider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider> ``` 2. 在res/xml文件创建一个名为file_paths.xml的文件,并在其指定保存图片的路径: ```xml <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-files-path name="my_images" path="Pictures" /> </paths> ``` 3. 在拍照的Activity,创建一个文件对象并将其保存在指定的路径下: ```java File photoFile = null; try { photoFile = File.createTempFile( "IMG_", /* prefix */ ".jpg", /* suffix */ getExternalFilesDir(Environment.DIRECTORY_PICTURES) /* directory */ ); } catch (IOException ex) { // Error occurred while creating the File ... } // Save a file: path for use with ACTION_VIEW intents String currentPhotoPath = photoFile.getAbsolutePath(); ``` 4. 启动相机应用,并在onActivityResult()方法获取拍摄后的照片uri: ```java private static final int REQUEST_IMAGE_CAPTURE = 1; private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // Ensure that there's a camera activity to handle the intent if (takePictureIntent.resolveActivity(getPackageManager()) != null) { // Create the File where the photo should go File photoFile = null; try { photoFile = createImageFile(); } catch (IOException ex) { // Error occurred while creating the File ... } // Continue only if the File was successfully created if (photoFile != null) { Uri photoURI = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".fileProvider", photoFile); takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { // Get the uri of the captured image Uri uri = Uri.fromFile(photoFile); ... } } ``` 注意:在Android 10及以上版本,需要使用FileProvider来获取文件uri,而不是直接使用file://协议。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值