首页 > 解决方案 > React Native 上传文件

问题描述

如何上传不需要刷新浏览器即可从文件夹中获取最新信息的文件?当我完成更新文件夹时,我上传了文档,然后文档没有继承文件夹的更新信息,旧的被继承了但是当你更新文件夹后刷新浏览器时,文档获取新的更新信息文件夹。

  useEffect(
    React.useCallback(() => 
    {
      const task = InteractionManager.runAfterInteractions(async () => 
      {
        const _token =  await AsyncStorage.getItem('@token');
        setToken(_token);
        Promise.all([          
          GetFolderInformation(_token,props.FolderId)
        ]).then(()=>setFetched(true))
        .catch(ex=> console.error(ex));
      });
      return () => task.cancel();
    });

//

  const GetFolderInformation= async (_token, folderId)=>{
    try {
      fetch(config.API_URL + '/folders/info/'+folderId, {
        method: 'GET',
        headers: {
          'Authorization': 'Bearer '+ _token,
          'Content-Type': 'application/json',
        },
      })
      .then((response) =>  response.json().then(data=>({status:response.status, body:data})) )
      .then(async (response) => {
        if(response.status==200){
          if(response.body.length > 0)
          {
            setParentFolderClassification(response.body[0].fmDocumentClassificationsId);
            setParentFolderLocation(response.body[0].fmDocumentLocationsId);
            if(Array.isArray(response.body[0].Tags)) 
              setParentFolderTags(response.body[0].Tags.join('|'))
          }

        }else{
          return false;
        }
      });
      
    } catch (e) {
      console.log(e);
    }
  
  }

//

  const _pickDocument = async()=>
  {
    let _loggedInUserid;
    try {
      let jsonValue = await AsyncStorage.getItem('@storage_Key')
      jsonValue = JSON.parse(jsonValue);
      setLoggedInUserData(jsonValue);
      console.log("jsonValue",jsonValue);
      _loggedInUserid = jsonValue.userId
    } catch(e) {
      console.log(e);
    }
    let file = await DocumentPicker.getDocumentAsync({
      copyToCacheDirectory: false, 
      type: '*/*',
    });
    if (file.type === 'cancel') {
      return;
    }
    let filesize = file.size * 0.001;
    let filesizeExt = " KB";
    if(filesize > 1000){
      filesize = Math.round(filesize * 0.001);
      filesizeExt=" MB";
    } 
    props.uploadProgressViewHandler([{
      key:file.name+filesize,
      id:0, 
      fileName: file.name,
      filesize:filesize+ filesizeExt,
      progress:0,
      statusCode:200, 
      status:'InProgress', 
      message:'Document is uploading...' 
    }]);
    try {
      file.folderLocation = folderLocation;
      const fetchResponse = await fetch(file.uri);
      const blob = await fetchResponse.blob();
      file.blob = blob;
      let response = await uploadFileToS3(file);
      let documentID = 0;

      if(response.Code == 200 )
      {
        documentID = await createNewDocumentDBRecord({
          "strtags":ParentFolderTags,
        });
        props.uploadProgressViewHandler([{
          key:file.name+filesize,
          id:documentID, 
          fileName: file.name,
          filesize:filesize+ filesizeExt,
          progress:100,
          statusCode:200, 
          status:'Success', 
          message:'Successfully Uploaded!' 
        }]);
      }else{
        props.uploadProgressViewHandler([{
          key:file.name+filesize,
          id:documentID, 
          fileName: file.name,
          filesize:filesize+ filesizeExt,
          progress:0, 
          statusCode:400, 
          status:response.Status, 
          message: response.Message
        }]);
      }
    } catch (error) {
      console.log('ERR: ' + error.message);
    }
  }

//

  const createNewDocumentDBRecord= (_data) =>{
    try{
      fetch(config.API_URL + '/documents/create', {
        method: 'POST',
        body: JSON.stringify(_data),
        headers: {
          'Authorization': 'Bearer '+ token,
          'Content-Type': 'application/json',
        },
      })
      .then((response) =>  response.json().then(data=>({status:response.status, body:data})) )
      .then((response) => {
        
        console.log("data",response);
        if(response.status==200){
          return response.body[0]._trdocumentsid;
        }else{
          console.log("error creating new document db record");
          return false;
        }
      });
    }catch(err){
      console.log("err",err);
      return false;
    }
  }

标签: reactjsreact-native

解决方案


推荐阅读