- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
第一次使用 React-Admin。我正在使用它来创建一个面板,该面板主要监控我从 API 获得的一些参数。但是,其中一个部分需要上传 .csv 文件。我正在尝试使用 FileInput 来实现它,但我无法捕获该文件。我不知道该怎么做。
文件选择步骤(从电脑到浏览器)工作正常,但我的问题是我无法在该步骤后处理文件。我阅读了文档,但我不知道该怎么做。我尝试了很多不同的方法,但我越来越疯狂。
下面是基本代码。我想我必须添加一个处理程序或类似的东西但是,如何?我对 React 也没什么经验。我了解基础知识,但我只是构建了几个( super )简单的应用程序。仅供学习。
// UploadFile.js
...
export const UploadSection = props => (
<SimpleForm>
<FileInput source="csvFile" label="Upload file (.csv)" accept="text/csv" >
<FileField source="src" title="title" />
</FileInput>
</SimpleForm>
);
// App.js
...
const App = () => (
<Admin dataProvider={dataProvider} authProvider={authProvider} >
...
<Resource name="uploadSection" list={UploadSection} />
...
</Admin>
);
问题:
提前致谢!
最佳答案
经过几个小时的努力,我让它开始工作了。
第一个问题(我评论@selens 回答的问题): 我得到了 Uncaught TypeError: _this.props.save is not a function
因为我没有在创建或编辑 View 。看来您需要在创建或编辑 View 中使用 FileInput。否则,保存按钮将不起作用。
来自 docs :
save: The function invoked when the form is submitted. This is passed automatically by react-admin when the form component is used inside Create and Edit components.
第二个问题:在我的例子中,我一次上传一个文件(FileInput 中的 multiple={false})。但是,代码 addUploadFeature.js
已准备好用于多个文件。因此,我编辑了 addUploadFeature.js
的一部分以仅上传一个文件。请参阅下面的完整文件。
// addUploadFeature.js
const convertFileToBase64 = file => new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file.rawFile);
reader.onload = () => resolve(reader.result);
reader.onerror = reject;
});
const addUploadFeature = requestHandler => (type, resource, params) => {
if (type === 'UPDATE' && resource === 'myResource') {
if (params.data.myFile) {
// NEW CODE HERE (to upload just one file):
const myFile = params.data.myFile;
if ( !myFile.rawFile instanceof File ){
return Promise.reject('Error: Not a file...'); // Didn't test this...
}
return Promise.resolve( convertFileToBase64(myFile) )
.then( (picture64) => ({
src: picture64,
title: `${myFile.title}`
}))
.then( transformedMyFile => requestHandler(type, resource, {
...params,
data: {
...params.data,
myFile: transformedMyFile
}
}));
}
}
return requestHandler(type, resource, params);
};
export default addUploadFeature;
毕竟,我能够将文件以 Base64 格式发送到服务器。
希望这对将来的人有用;)
关于admin-on-rest - react 管理员 |无法使用 FileInput 上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55266746/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!