如何在React Native中使用图像uri删除图像?

时间:2018-12-24 14:38:58

标签: javascript react-native

我正在尝试开发一个简单的应用程序。此应用程序发布包含图像和一些文本字段的多部分表单数据。我正在使用react-native-image-picker选择图像。我的应用程序运行正常。但是我注意到它没有清除图像。这就是为什么我的应用程序大小不断增加的原因。如果我转到常规> iPhone存储,我可以看到我的应用程序大小增加。

我尝试使用以下代码删除该图像,但是它不起作用。

import RNFetchBlob from 'react-native-fetch-blob';
RNFetchBlob.fs.unlink(imageuri)
 .then(() => {
    console.log('file deleted!');
 });

我认为RnFetchBlob需要实际的文件路径。我的上传函数的代码如下。

upload() {
var new_state = this.state;
var image_array = this.state.imageArray;
var comment = this.state.main_comment;

var new_state = this.state;
new_state.loader_show = !new_state.loader_show;
this.setState(new_state);

navigator.geolocation.getCurrentPosition(position => {
  var lat = parseFloat(position.coords.latitude);
  var lon = parseFloat(position.coords.longitude);
  var new_state = this.state;
  new_state.lat = lat;
  new_state.lon = lon;
});
var position = "position(" + this.state.lat + "," + this.state.lon + ")";

for (var i = 0; i < image_array.length; i++) {
  var file_name = position + "-" + i;
  const data = new FormData();
  data.append("name", file_name);
  data.append("comment", comment); // you can append anyone.
  data.append("images", {
    uri: image_array[i].uri,
    type: "image/jpeg", // or photo.type
    name: "testPhotoName"
  });
  fetch("#####", {
    method: "post",
    body: data
  })
    .then(res => {
      alert("Successfully uploaded from " + position);

      ************************* Here I want to Delete the file *******
      RNFetchBlob.fs.unlink(image_array[i].uri).then(() => {
        console.log("file deleted!");
      });
      ****************************************************************
    })
    .catch(err => {
      // ...
      alert(err);
    });
}

请注意,我将图像uri存储在我的状态下。我没有本地文件路径。我想在上传完成后使用uri删除图片。

1 个答案:

答案 0 :(得分:0)

我解决了我的问题。以下代码对我有用。

  var uri = images[i].uri;
  var path = uri.split("///").pop();

  RNFetchBlob.fs
    .unlink(path)
    .then(() => {
      alert("File deleted");
    })
    .catch(err => {
      alert(err);
    });