[JAVA] Hochladen und Herunterladen von Dateien mit Ajax mit Spring Boot (ohne JQuery)

Zwei Dinge zu machen

  1. Laden Sie das Bild mit Ajax hoch, speichern Sie es auf dem Server und zeigen Sie es an
  2. Wählen Sie das anzuzeigende Bild aus und drücken Sie die Bildanzeigetaste, um es mit Ajax herunterzuladen und das Bild anzuzeigen.

Demo-Bildschirm

image.png

1. Datei hochladen

imageajax.HTML (Teil)


<body>
	<h3>Datei-Upload</h3>

	<form id="imageFormId">
		<input type="file" name="inputFileName" />
		<button type="button" onclick="uploadImage('imageFormId', 'myUploadedImageId')">Bild hochladen</button>
	</form>
	<img id="myUploadedImageId" style="width: 400px">

	<script>
		function uploadImage(imgForm, imgCtrl) {
			const formData = new FormData(document.getElementById(imgForm));
			const request = new XMLHttpRequest();
			request.onreadystatechange = function() {
				if (this.readyState == 4 && this.status == 200) {
					const img = document.getElementById(imgCtrl);
					const url = window.URL || window.webkitURL;
					//Zeigen Sie die Antwort als Bild an
					img.src = url.createObjectURL(this.response);
				}
			}
			request.open("POST", "/uploadimage");
			request.responseType = 'blob';
			request.send(formData);
		}
	</script>
</body>

ImageAjaxController (Teil)


	/**
	 *Datei-Upload
	 */
	@PostMapping("/uploadimage")
	public ResponseEntity<byte[]> uploadImage(@RequestParam("inputFileName") final MultipartFile uploadFile) {

		if (uploadFile.isEmpty()) {
			return ResponseEntity.of(Optional.empty());
		}
		//Pfad zum Speichern hochgeladener Dateien abrufen
		final Path path = Paths.get("c:/uploaddir", uploadFile.getOriginalFilename());

		final byte[] bytes;
		try {
			//Holen Sie sich die Binärdatei der hochgeladenen Datei
			bytes = uploadFile.getBytes();
			//Dateispeicher
			Files.write(path, bytes);
		} catch (IOException e) {
			return ResponseEntity.of(Optional.empty());
		}
		return ResponseEntity.ok(bytes);
	}

application.yml


spring:
  servlet:
    multipart:
      max-file-size: 30MB
      max-request-size: 30MB

2. Dateiauswahl

imageajax.HTML (Teil)


<body>
	<h3>Dateiauswahl</h3>

	<select id="selectImageId">
		<option value="a">a</option>
		<option value="b">b</option>
	</select>
	<button type="button" onclick="displayImage('selectImageId', 'mySelectedImageId')">Bildschirm</button>
	<img id="mySelectedImageId" style="width: 400px">

	<script>
		function displayImage(selectCtrl, imgCtrl) {
			const select = document.getElementById(selectCtrl);
			const request = new XMLHttpRequest();
			request.onreadystatechange = function() {
				if (this.readyState == 4 && this.status == 200) {
					const img = document.getElementById(imgCtrl);
					const url = window.URL || window.webkitURL;
					//Zeigen Sie die Antwort als Bild an
					img.src = url.createObjectURL(this.response);
				}
			}
			//Senden Sie eine Auswahl und holen Sie sich Dateien
			request.open("GET", "/selectimage/" + select.value);
			request.responseType = 'blob';
			request.send();
		}
	</script>
</body>

ImageAjaxController (Teil)


	/**
	 *Dateiauswahl
	 */
	@GetMapping("/selectimage/{selectNum}")
	public ResponseEntity<byte[]> getImage(@PathVariable final String selectNum) {

		//Holen Sie sich den Dateinamen aus der Auswahl
		final String fileName;
		switch (selectNum) {
		case "a":
			fileName = "a.jpg ";
			break;
		case "b":
			fileName = "b.jpg ";
			break;
		default:
			return ResponseEntity.of(Optional.empty());
		}

		//Dateipfad
		final Path path = Paths.get("c:/selectdir", fileName);

		final byte[] bytes;
		try {
			//Lesen Sie die Datei
			bytes = Files.readAllBytes(path);
		} catch (IOException e) {
			return ResponseEntity.of(Optional.empty());
		}
		return ResponseEntity.ok(bytes);
	}

Recommended Posts

Hochladen und Herunterladen von Dateien mit Ajax mit Spring Boot (ohne JQuery)
Testen Sie die Klasse mit Feldinjektion im Spring-Boot-Test, ohne den Spring-Container zu verwenden
Abrufen von Fehlerinformationen mithilfe von DefaultErrorAttributes und ErrorAttributeOptions in Spring Boot 2.3
So steuern Sie Transaktionen in Spring Boot ohne Verwendung von @Transactional
Anforderungs- und Antwortprotokolle mit Spring Boot ausgeben
Testen von JPA-Entitäten und -Repositorys mit Spring Boot @DataJpaTest
Versuchen Sie es mit einem DI-Container mit Laravel und Spring Boot
CSRF-Gegenmaßnahmenrichtlinie und Implementierungsbeispiel in einer REST-Anwendung unter Verwendung von "Spring Boot" + "EXT JS"
Stellen Sie Spring Boot-Anwendungen für Heroku bereit, ohne die Heroku-CLI zu verwenden
Aufrufen und Verwenden der API in Java (Spring Boot)
Verwenden Sie thymeleaf3 mit parent, ohne Spring-Boot-Starter-Parent in Spring Boot anzugeben
8 Dinge, die mit Spring Boot und JPA in die DB eingefügt werden müssen
Legen Sie den Kontextparameter in Spring Boot fest
Spring Boot 2 Multiprojekt mit Gradle
Wichtige Änderungen in Spring Boot 1.5
NoHttpResponseException in Spring Boot + WireMock
Versuchen Sie es mit Spring Boot Security
Einfache Entwicklung von Webanwendungen mit STS und Spring Boot. In 10 Minuten.
Wird in Spring Boot mithilfe einer Bean-Definitionsdatei mit dem Namen application.xml angepasst
Vergleiche Hallo Welt! Mit Spring Boot mit Java, Kotlin und Groovy
Stellen Sie sich die Spring Boot-App mit dem Jib-Maven-Plugin vor und starten Sie sie mit Docker
Unbekannter Fehler in Zeile 1 von pom.xml bei Verwendung von Spring Boot in Eclipse
Frühlingsstiefel Hallo Welt in Eclipse
Spring Boot-Anwendungsentwicklung in Eclipse
Aktivieren Sie jQuery und Bootstrap in Rails 6 (Rails 6).
Spring Boot Tutorial Verwenden der Spring Security-Authentifizierung
Schreiben Sie den Testcode mit Spring Boot
Implementieren Sie die REST-API mit Spring Boot
Spring-Profilfunktion und Spring Boot application.properties
Was ist @Autowired im Spring Boot?
Implementieren Sie die Spring Boot-Anwendung in Gradle
Verwendung von Thymeleaf mit Spring Boot
Erstellen Sie mit Intellij ein Spring Boot-Projekt und beenden Sie es sofort nach dem Start
[Spring MVC] Implementieren Sie die in der URL enthaltenen dynamischen Parameter ohne Verwendung von Optional (~ Java7).
[Spring Boot] Poste Dateien und andere Daten gleichzeitig [Axios]
Automatische Bereitstellung von in Java entwickelten Webanwendungen mit Jenkins [Spring Boot App Edition]