React中FilePond上传完成后自定义带文件ID的成功消息
解决FilePond上传完成消息显示文件ID的问题
直接修改组件实例的labelFileProcessingComplete属性不会生效,因为FilePond的标签配置依赖props或实例的配置方法,且静态字符串无法动态适配每个文件的上传结果。正确的做法是把labelFileProcessingComplete设为动态函数,结合服务器返回的文件ID实现需求:
具体步骤
- 将
labelFileProcessingComplete定义为接收file参数的函数,动态生成带文件ID的提示文本 - 确保server配置的
onload回调正确返回服务器的文件ID,让FilePond自动绑定到file.serverId
修改后的完整代码
<FilePond ref={filePondRef} oninit={() => handleInit()} files={files} onupdatefiles={setFiles} onprocessfile={(error, file) => { if (error) { console.log('OnProcessFile: we have an error:' + error); console.dir(error); return; } console.log('OnProcessFile:File processed', file); console.log('OnProcessFile:serverId is ', file.serverId); // 此处无需修改label属性,函数会自动处理 }} labelIdle='Drag & Drop your files or <span class="filepond--label-action">Browse</span>' server={{ timeout: 7000, process: { url: apiUrl, method: 'POST', withCredentials: false, timeout: 7000, onload: (res) => { console.log('onload:server returned fileId=' + res); // 若返回的是JSON字符串,需先解析,示例:const resObj = JSON.parse(res); return resObj.fileId; return res; // 返回文件ID,FilePond会自动赋值给file.serverId } } }} // 动态生成上传完成提示 labelFileProcessingComplete={(file) => `上传完成,文件${file.serverId}`} labelFileProcessingError={() => { console.log('labelFileProcessingError: serverResponse is:' + serverResponse ); return serverResponse; }} />
关键说明
labelFileProcessingComplete作为函数时,FilePond会在每个文件上传完成后调用它,并传入当前文件对象,因此可以直接使用file.serverId(由server的onload返回值自动设置)- 无需在
onprocessfile或onload里手动修改实例属性,函数式的标签配置会自动适配每个文件的上传结果
内容的提问来源于stack exchange,提问作者Sparky
相关产品推荐
相关产品推荐

