首页 > 解决方案 > React Native Expo Document Picker Throw Error Call to a member function getClientOriginalExtension() on null

问题描述

我尝试使用 expo-document-picker 选择一个文档并将其发送到我的后端,使用 laravel,当我尝试使用邮递员时一切正常,但是在使用移动设备时它会抛出一个 getClientOriginalExtension() null 错误,任何解决方案的家伙?谢谢。

这是我获取文档的代码

  pickSKL = async () => {
    let result = await DocumentPicker.getDocumentAsync({
      type: "application/pdf",
      copyToCacheDirectory: false,
    });
    if (result.type !== "cancel") {
      this.setState({
        uploadSKL: result.uri,
        uploadSKLName: result.name,
      });
    }
  };

  pickPelunasan = async () => {
    let result = await DocumentPicker.getDocumentAsync({
      type: "application/pdf",
      copyToCacheDirectory: false,
    });
    if (result.type !== "cancel") {
      this.setState({
        uploadPelunasan: result.uri,
        uploadPelunasanName: result.name,
      });
    }
  };

将文件上传到服务器的功能

const formData = new FormData();
const method = "POST";
formData.append("id_ptsp", idPTSP);
formData.append("id_submenu1", param1);
formData.append("id_submenu2", param2);
formData.append("nama_pengaju", this.state.nama);
formData.append("nis", this.state.nis);
formData.append("nisn", this.state.nisn);
formData.append("jurusan", this.state.jurusan);
formData.append("tahun_lulus", this.state.tahunLulus);
formData.append("nomor_hp", this.state.nomorHP);
formData.append("attachment_skl", this.state.uploadSKL);
formData.append("attachment_bukti_pelunasan",this.state.uploadPelunasan);
const options = {
 method,
 body: formData,
 headers: {
  "Content-Type": "multipart/form-data",
 },
};
await fetch(ApiUrl.postPengajuanPTSP, options)
 .then((response) => response.text())
 .then((responseJson) => {
  this.setState({ loadingPost: false });
  try {
   if (responseJson.status !== "error") {
    const data = responseJson.result;
    this.props.navigation.goBack();
    Alert.alert("", data);
   }
  } catch ({ message }) {
   console.error(message);
   Alert.alert("", "Error");
  }
})
.catch((error) => {
 this.setState({ loadingPost: false });
 console.error(error);
 Alert.alert("", "Error");
});

这是在服务器端获取正文请求

$file = $request->file('attachment_skl');
$file2 = $request->file('attachment_bukti_pelunasan');
$destinationPath = 'file/ptsp';
$jml = \Illuminate\Support\Str::random(9);
$jml2 = \Illuminate\Support\Str::random(9);
$ext=$file->getClientOriginalExtension();
$ext2=$file2->getClientOriginalExtension();
$name='ptsp'.$jml.'.'.$ext;
$name2='ptsp'.$jml2.'.'.$ext2;
$file->move($destinationPath,$name);
$file2->move($destinationPath,$name2);
$url_file = url('file/ptsp').'/'.$name;
$url_file2 = url('file/ptsp').'/'.$name2;
$data = [
 'id_ptsp' => $request->id_ptsp,
 'id_submenu1' => $request->id_submenu1,
 'id_submenu2' => $request->id_submenu2,
 'nama_pengaju' => $request->nama_pengaju,
 'nis' => $request->nis,
 'nisn' => $request->nisn,
 'jurusan' => $request->jurusan,
 'tahun_lulus' => $request->tahun_lulus,
 'nomor_hp' => $request->nomor_hp,
 'attachment_skl' => $url_file,
 'attachment_bukti_pelunasan' => $url_file2,
 'created_at' => Carbon::now()->toDateTimeString(),
];

标签: laravelreact-nativeexpo

解决方案


推荐阅读