You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native文件上传后无法展示文件信息问题求助

问题:React Native文件选择后无法展示文件信息

我用React Native开发了一个文件选择按钮,功能正常,但选中文件后,设备视图里始终显示文件名称、大小等信息为undefined,虽然控制台能正常打印出这些信息。

相关代码

import DocumentPicker from 'react-native-document-picker';

const App = () => {
  const [singleFile, setSingleFile] = useState('');
  
  const selectOneFile = async () => {
    try {
      const res = await DocumentPicker.pick({
        type: [DocumentPicker.types.allFiles],
      });
      console.log('res : ' + JSON.stringify(res));
      console.log('URI : ' + res.uri);
      console.log('Type : ' + res.type);
      console.log('File Name : ' + res.name);
      console.log('File Size : ' + res.size);
      setSingleFile(res);
    } catch (err) {
      if (DocumentPicker.isCancel(err)) {
        alert('Canceled from single doc picker');
      } else {
        alert('Unknown Error: ' + JSON.stringify(err));
        throw err;
      }
    }
  };
  
  return (
    <>
      <TouchableOpacity
        activeOpacity={0.5}
        style={styles.buttonStyle}
        onPress={selectOneFile}>
        <Text style={{marginRight: 10, fontSize: 19}}>
          Click here to pick one file
        </Text>
        <Image
          source={{
            uri: 'https://img.icons8.com/offices/40/000000/attach.png',
          }}
          style={styles.imageIconStyle}
        />
      </TouchableOpacity>
      <Text style={styles.textStyle}>
        File Name: {singleFile.name ? singleFile.name : ''}
        {'\n'}
        Type: {singleFile.type ? singleFile.type : ''}
        {'\n'}
        File Size: {singleFile.size ? singleFile.size : ''}
        {'\n'}
        URI: {singleFile.uri ? singleFile.uri : ''}
        {'\n'}
      </Text>
    </>
  )
}

问题原因

控制台输出显示,DocumentPicker.pick()返回的是数组(即使只选择了单个文件),但代码里直接把这个数组赋值给了singleFile状态。数组本身没有name、size这类属性,所以访问时会返回undefined。

解决方法

  1. 修正状态赋值:取数组的第一个元素赋值给singleFile
// 替换原来的setSingleFile(res);
setSingleFile(res[0]);
  1. 优化状态初始化:将初始值从空字符串改为null,更符合对象类型的预期
const [singleFile, setSingleFile] = useState(null);
  1. 简化文本展示逻辑:使用可选链操作符?.简化判断,避免冗余代码
<Text style={styles.textStyle}>
  File Name: {singleFile?.name || ''}
  {'\n'}
  Type: {singleFile?.type || ''}
  {'\n'}
  File Size: {singleFile?.size || ''}
  {'\n'}
  URI: {singleFile?.uri || ''}
  {'\n'}
</Text>

修改后就能正常在设备视图中展示所选文件的名称、大小等信息了。

内容的提问来源于stack exchange,提问作者Giovanny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 21:35:20