我继承了一个代码库,该代码库是AWS EC2实例服务器上的前端React.JS和后端的Node.JS / Express.JS。我使用的代码是react-dropzone(https://react-dropzone.js.org/),仅用于拖放图像文件。我正在研究的项目的产品负责人现在希望它接受所有文件(* .pdf,*。docx,*。xlsx等)。
我想知道如何使它接受所有文件?我已经浏览了react-dropzone文档,但还没有找到任何示例来展示如何使其接受 all 文件类型?将accept="..."
从accept="image/*"
设置为accept="*/*"
一样简单吗? accept="..."
的字符串可以是一个数组,例如:accept=["image/*","text/*",...]
等吗?什么是使react-dropzone接受任何文件类型的正确方法?
这是我的onDrop
回调的代码-
onDrop = (acceptedFiles, rejectedFiles) => {
let files = acceptedFiles.map(async file => {
let data = new FormData();
data.append("file", file);
let item = await axios
.post("triage/upload", data, {
headers: {
"X-Requested-With": "XMLHttpRequest",
"Content-Type": "application/x-www-form-urlencoded"
}
})
.then(response => {
return Object.assign(file, {
preview: URL.createObjectURL(file),
filename: response.data.filename
});
})
.catch(err => {
let rejects = rejectedFiles.map(async file => {
let data = new FormData();
await data.append("file", file);
console.log("There was an error while attempting to add your files:", err);
console.log("The files that were rejected were:\n", rejects.join('\n'))
})
});
return item;
});
Promise.all(files)
.then(completed => {
console.log("completed", completed);
let fileNames = completed.map(function(item) {
return item["filename"];
});
this.setState({ files: completed, fileNames: fileNames });
})
.catch(err => {
console.log('DROPZONE ERROR:', err);
});
};
...这是<DropZone>
本身在同一文件中的代码-
<Dropzone accept="image/*" onDrop={this.onDrop}>
{({ getRootProps, getInputProps, isDragActive }) => {
return (
<div
{...getRootProps()}
className={classNames("dropzone", {
"dropzone--isActive": isDragActive
})}
>
<input {...getInputProps()} />
{isDragActive ? (
<div>
<div className="centered">
<Icon name="cloud upload" size="big" />
</div>
<div className="centered">Drop Files Here.</div>
<div className="centered">
<Button className="drop-button">
Or Click to Select
</Button>
</div>
</div>
) : (
<div>
<div className="centered">
<Icon name="cloud upload" size="big" />
</div>
<div className="centered">
Drag and Drop Supporting Files here to
Upload.
</div>
<div className="centered">
<Button className="drop-button">
Or Click to Select
</Button>
</div>
</div>
)}
</div>
);
}}
</Dropzone>
答案 0 :(得分:0)
您可以像常规input
一样使用,因此可以执行多种文件类型,例如:image/*,.pdf
。
参考here。
答案 1 :(得分:0)
我遇到了同样的问题。
react-dropzone
使用attr-accept
处理接受文件。让我们看一下后者的源代码。
* @param file {File} https://developer.mozilla.org/en-US/docs/Web/API/File
* @param acceptedFiles {string}
* @returns {boolean}
...
export default function(file, acceptedFiles) {
if (file && acceptedFiles) {
...
}
return true
}
要获得返回值true
,只需输入虚假的字符串值,即''
答案 2 :(得分:0)
只需从accept
删除<Dropzone />
道具,它将允许任何文件类型。
答案 3 :(得分:0)
如果您使用useDropZone,它将像这样
const {inputProps,...rest }=useDropZone({
onDrop,//onDrop function
acceptFiles:'image/png' //<--- here you provide input related info
})