diff --git a/extensions/cornerstone/src/components/DicomUpload/DicomUpload.css b/extensions/cornerstone/src/components/DicomUpload/DicomUpload.css
new file mode 100644
index 000000000..55ddf7922
--- /dev/null
+++ b/extensions/cornerstone/src/components/DicomUpload/DicomUpload.css
@@ -0,0 +1,6 @@
+.dicom-upload-drop-area-border-dash {
+ background-image: repeating-linear-gradient(to right, #7BB2CE 0%, #7BB2CE 50%, transparent 50%, transparent 100%), repeating-linear-gradient(to right, #7BB2CE 0%, #7BB2CE 50%, transparent 50%, transparent 100%), repeating-linear-gradient(to bottom, #7BB2CE 0%, #7BB2CE 50%, transparent 50%, transparent 100%), repeating-linear-gradient(to bottom, #7BB2CE 0%, #7BB2CE 50%, transparent 50%, transparent 100%);
+ background-position: left top, left bottom, left top, right top;
+ background-repeat: repeat-x, repeat-x, repeat-y, repeat-y;
+ background-size: 20px 3px, 20px 3px, 3px 20px, 3px 20px;
+}
diff --git a/extensions/cornerstone/src/components/DicomUpload/DicomUpload.tsx b/extensions/cornerstone/src/components/DicomUpload/DicomUpload.tsx
new file mode 100644
index 000000000..fa29e65d1
--- /dev/null
+++ b/extensions/cornerstone/src/components/DicomUpload/DicomUpload.tsx
@@ -0,0 +1,116 @@
+import React, { useCallback, useState } from 'react';
+import { ReactElement } from 'react';
+import Dropzone from 'react-dropzone';
+import PropTypes from 'prop-types';
+import classNames from 'classnames';
+import DicomFileUploader from '../../utils/DicomFileUploader';
+import DicomUploadProgress from './DicomUploadProgress';
+import { Button } from '@ohif/ui';
+import './DicomUpload.css';
+
+type DicomUploadProps = {
+ dataSource;
+ onComplete: () => void;
+ onStarted: () => void;
+};
+
+function DicomUpload({
+ dataSource,
+ onComplete,
+ onStarted,
+}: DicomUploadProps): ReactElement {
+ const baseClassNames = 'min-h-[520px] flex flex-col bg-black select-none';
+ const [dicomFileUploaderArr, setDicomFileUploaderArr] = useState([]);
+
+ const onDrop = useCallback(async acceptedFiles => {
+ onStarted();
+ setDicomFileUploaderArr(
+ acceptedFiles.map(file => new DicomFileUploader(file, dataSource))
+ );
+ }, []);
+
+ const getDropZoneComponent = (): ReactElement => {
+ return (
+