reactjs - 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;
}
}
解决方案
推荐阅读
- python - 将 lambda 函数应用于具有 NaN 值的数据帧?
- javascript - 模态窗口的 DIV ID
- c++ - c ++浮点只浮动一些数字
- mongodb - 尝试使用内联编辑器将 mongoDB 集成到 Dialogflow
- laravel - 如何在我的 laravel 应用程序中正确设置 mailgun?
- uml - 是否可以在 BoUML 中清晰地建模地图?
- mpv - 如何在 mpv 中设置默认播放速度?
- python - 安装张量流服务器模型时 etcd.service 的作业失败
- android - 如何通过 TextField 输入显示文本?
- c# - 无论局部角度如何,在全局 XZ 平面上移动相机(Unity)