Я унаследовал кодовую базу, которая является React.JS на внешнем интерфейсе и Node.JS / Express.JS на внутреннем сервере на сервере экземпляров AWS EC2. Код, который я использую, реагирует на dropzone (https://react -dropzone.js.org / ) и был создан для перетаскивания файлов изображений. Владелец продукта для проекта, над которым я сейчас работаю, хочет, чтобы он принимал все файлы (* .pdf, * .docx, * .xlsx и т. Д.).
Мне интересно, как заставить его принимать все файлы? Я просмотрел документы по реакционной зоне и пока не нашел ни одного примера, чтобы показать, как заставить его принимать все типы файлов? Это так же просто, как установить accept="..."
с accept="image/*"
на accept="*/*"
? может ли строка для accept="..."
быть массивом, например: accept=["image/*","text/*",...]
и т. д.? Как правильно заставить реагирующую дропзону принимать файлы любого типа?
Вот код моего 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>