diff --git a/resources/i18n/en.json b/resources/i18n/en.json
index 63bc598304..59a155cb22 100644
--- a/resources/i18n/en.json
+++ b/resources/i18n/en.json
@@ -175,6 +175,8 @@
"home.title": "DSpace Angular :: Home",
"home.top-level-communities.head": "Communities in DSpace",
"home.top-level-communities.help": "Select a community to browse its collections.",
+ "item.bitstreams.upload.bundle-name": "Bundle Name",
+ "item.bitstreams.upload.drop-message": "Drop a file to upload",
"item.edit.delete.cancel": "Cancel",
"item.edit.delete.confirm": "Delete",
"item.edit.delete.description": "Are you sure this item should be completely deleted? Caution: At present, no tombstone would be left.",
diff --git a/src/app/+item-page/bitstreams/upload/upload-bitstream.component.html b/src/app/+item-page/bitstreams/upload/upload-bitstream.component.html
new file mode 100644
index 0000000000..7bb855c75c
--- /dev/null
+++ b/src/app/+item-page/bitstreams/upload/upload-bitstream.component.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/+item-page/bitstreams/upload/upload-bitstream.component.ts b/src/app/+item-page/bitstreams/upload/upload-bitstream.component.ts
new file mode 100644
index 0000000000..b373a28910
--- /dev/null
+++ b/src/app/+item-page/bitstreams/upload/upload-bitstream.component.ts
@@ -0,0 +1,37 @@
+import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';
+import { Observable } from 'rxjs/internal/Observable';
+import { RemoteData } from '../../../core/data/remote-data';
+import { Item } from '../../../core/shared/item.model';
+import { map } from 'rxjs/operators';
+import { ActivatedRoute, Router } from '@angular/router';
+
+@Component({
+ selector: 'ds-upload-bitstream',
+ templateUrl: './upload-bitstream.component.html',
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+/**
+ * Page component for uploading a bitstream to an item
+ */
+export class UploadBitstreamComponent implements OnInit {
+
+ /**
+ * The item to upload a bitstream to
+ */
+ itemRD$: Observable>;
+
+ /**
+ * The name of the bundle to add the bitstream to
+ * Defaults to ORIGINAL
+ */
+ bundleName$: Observable;
+
+ constructor(private route: ActivatedRoute) {
+ }
+
+ ngOnInit(): void {
+ this.itemRD$ = this.route.data.pipe(map((data) => data.item));
+ this.bundleName$ = this.route.queryParams.pipe(map((params) => params.bundleName));
+ }
+
+}
diff --git a/src/app/+item-page/item-page-routing.module.ts b/src/app/+item-page/item-page-routing.module.ts
index ec562842aa..b95459674f 100644
--- a/src/app/+item-page/item-page-routing.module.ts
+++ b/src/app/+item-page/item-page-routing.module.ts
@@ -7,6 +7,7 @@ import { ItemPageResolver } from './item-page.resolver';
import { URLCombiner } from '../core/url-combiner/url-combiner';
import { getItemModulePath } from '../app-routing.module';
import { AuthenticatedGuard } from '../core/auth/authenticated.guard';
+import { UploadBitstreamComponent } from './bitstreams/upload/upload-bitstream.component';
export function getItemPageRoute(itemId: string) {
return new URLCombiner(getItemModulePath(), itemId).toString();
@@ -16,6 +17,7 @@ export function getItemEditPath(id: string) {
}
const ITEM_EDIT_PATH = ':id/edit';
+const UPLOAD_BITSTREAM_PATH = ':id/bitstreams/new';
@NgModule({
imports: [
@@ -40,6 +42,14 @@ const ITEM_EDIT_PATH = ':id/edit';
loadChildren: './edit-item-page/edit-item-page.module#EditItemPageModule',
canActivate: [AuthenticatedGuard]
},
+ {
+ path: UPLOAD_BITSTREAM_PATH,
+ component: UploadBitstreamComponent,
+ resolve: {
+ item: ItemPageResolver
+ },
+ canActivate: [AuthenticatedGuard]
+ }
])
],
providers: [
diff --git a/src/app/+item-page/item-page.module.ts b/src/app/+item-page/item-page.module.ts
index 6743028b6c..b67bf12fd0 100644
--- a/src/app/+item-page/item-page.module.ts
+++ b/src/app/+item-page/item-page.module.ts
@@ -26,6 +26,7 @@ import { MetadataRepresentationListComponent } from './simple/metadata-represent
import { RelatedEntitiesSearchComponent } from './simple/related-entities/related-entities-search/related-entities-search.component';
import { MetadataValuesComponent } from './field-components/metadata-values/metadata-values.component';
import { MetadataFieldWrapperComponent } from './field-components/metadata-field-wrapper/metadata-field-wrapper.component';
+import { UploadBitstreamComponent } from './bitstreams/upload/upload-bitstream.component';
@NgModule({
imports: [
@@ -53,7 +54,8 @@ import { MetadataFieldWrapperComponent } from './field-components/metadata-field
ItemComponent,
GenericItemPageFieldComponent,
MetadataRepresentationListComponent,
- RelatedEntitiesSearchComponent
+ RelatedEntitiesSearchComponent,
+ UploadBitstreamComponent
],
exports: [
ItemComponent,