Bagaimana cara mengunduh file dari mysql?

Dalam tutorial ini, saya akan menunjukkan cara mengunggah dan mengunduh file ke/dari database dengan Spring Boot Rest API. Kami juga menggunakan antarmuka Spring Web

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
3 untuk menangani permintaan multi-bagian HTTP

Aplikasi Spring Boot ini bekerja dengan
– Sudut 8 / Sudut 10 / Sudut 11 / Sudut 12 / Sudut 13 / Sudut 14
– Bahan Sudut 12
– Klien Vue / Klien Vuetify
– React Client / React Hooks Client
– Klien Material UI
– Klien Axios

Pos terkait
– Cara mengunggah banyak file di Java Spring Boot
– Sepatu Musim Semi. Unggah/Impor data file Excel ke dalam Database MySQL
– Sepatu Musim Semi. Unggah/Impor data file CSV ke Database MySQL

Penyebaran
– Menerapkan Aplikasi Spring Boot di AWS – Elastic Beanstalk
– Komposisi Docker. Contoh Spring Boot dan MySQL


Isi

Spring Boot Rest API untuk mengunggah File ke Database

Aplikasi Spring Boot kami akan menyediakan API untuk

  • mengunggah File ke database PostgreSQL/MySQL
  • mengunduh basis data File dengan tautan
  • mendapatkan daftar informasi File (nama file, url, jenis, ukuran)

Ini adalah API yang akan diekspor

MethodsUrlsActionsPOST/uploadupload FileGET/filesdapatkan Daftar File (nama, url, jenis, ukuran)GET/files/[fileId]download File

File yang diunggah akan disimpan di tabel file Database PostgreSQL/MySQL dengan bidang-bidang ini.

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
4,
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
5,
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
6 dan
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
7 sebagai tipe BLOB (Binary Large Object adalah untuk menyimpan data biner seperti file, gambar, audio, atau video)

Bagaimana cara mengunduh file dari mysql?
Bagaimana cara mengunduh file dari mysql?

Teknologi

  • Jawa 8
  • Spring Boot 2 (dengan Spring Web MVC)
  • Database PostgreSQL/MySQL
  • Maven 3. 6. 1

Struktur Proyek

Bagaimana cara mengunduh file dari mysql?
Bagaimana cara mengunduh file dari mysql?

Izinkan saya menjelaskannya secara singkat

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
8 adalah model data yang sesuai dengan tabel file dalam database
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
9 memperluas Spring Data
<dependency>
	<groupId>org.postgresql</groupId>
	<artifactId>postgresql</artifactId>
	<scope>runtime</scope>
</dependency>
0 yang memiliki metode untuk menyimpan dan mengambil file
<dependency>
	<groupId>org.postgresql</groupId>
	<artifactId>postgresql</artifactId>
	<scope>runtime</scope>
</dependency>
1 menggunakan
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
9 untuk menyediakan metode untuk menyimpan file baru, mendapatkan file dengan id, mendapatkan daftar File
<dependency>
	<groupId>org.postgresql</groupId>
	<artifactId>postgresql</artifactId>
	<scope>runtime</scope>
</dependency>
_3 menggunakan
<dependency>
	<groupId>org.postgresql</groupId>
	<artifactId>postgresql</artifactId>
	<scope>runtime</scope>
</dependency>
1 untuk mengekspor Rest API. POST file, DAPATKAN semua informasi file, unduh File
<dependency>
	<groupId>org.postgresql</groupId>
	<artifactId>postgresql</artifactId>
	<scope>runtime</scope>
</dependency>
5 menangani pengecualian saat pengontrol memproses unggahan file
<dependency>
	<groupId>org.postgresql</groupId>
	<artifactId>postgresql</artifactId>
	<scope>runtime</scope>
</dependency>
_6 berisi informasi file (nama, url, jenis, ukuran) untuk payload respons HTTP
– aplikasi. properties berisi konfigurasi untuk koneksi database Servlet Multipart dan PostgreSQL/MySQL
– pom. xml untuk Spring Boot, Spring Data JPA dan ketergantungan konektor PostgreSQL/MySQL

Siapkan proyek Boot Musim Semi

Gunakan alat web Spring atau alat pengembangan Anda (Spring Tool Suite, Eclipse, Intellij) untuk membuat proyek Spring Boot

Kemudian buka pom. xml dan tambahkan dependensi ini

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

Kita juga perlu menambahkan satu dependensi lagi
– Jika Anda ingin menggunakan MySQL

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>

– atau PostgreSQL

<dependency>
	<groupId>org.postgresql</groupId>
	<artifactId>postgresql</artifactId>
	<scope>runtime</scope>
</dependency>

Buat Model Data

Model Data ini untuk menyimpan Data File. Ada empat lapangan

  • <dependency>
    	<groupId>mysql</groupId>
    	<artifactId>mysql-connector-java</artifactId>
    	<scope>runtime</scope>
    </dependency>
    
    _4. secara otomatis dihasilkan sebagai UUID
  • <dependency>
    	<groupId>mysql</groupId>
    	<artifactId>mysql-connector-java</artifactId>
    	<scope>runtime</scope>
    </dependency>
    
    5. nama berkas
  • <dependency>
    	<groupId>mysql</groupId>
    	<artifactId>mysql-connector-java</artifactId>
    	<scope>runtime</scope>
    </dependency>
    
    _6. tipe pantomim
  • <dependency>
    	<groupId>mysql</groupId>
    	<artifactId>mysql-connector-java</artifactId>
    	<scope>runtime</scope>
    </dependency>
    
    _7. array byte, petakan ke BLOB

model/FileDB. Jawa

package com.bezkoder.spring.files.upload.db.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name = "files")
public class FileDB {
  @Id
  @GeneratedValue(generator = "uuid")
  @GenericGenerator(name = "uuid", strategy = "uuid2")
  private String id;

  private String name;

  private String type;

  @Lob
  private byte[] data;

  public FileDB() {
  }

  public FileDB(String name, String type, byte[] data) {
    this.name = name;
    this.type = type;
    this.data = data;
  }

  public String getId() {
    return id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getType() {
    return type;
  }

  public void setType(String type) {
    this.type = type;
  }

  public byte[] getData() {
    return data;
  }

  public void setData(byte[] data) {
    this.data = data;
  }

}

Pada kode di atas,

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
_7 dianotasi oleh
package com.bezkoder.spring.files.upload.db.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name = "files")
public class FileDB {
  @Id
  @GeneratedValue(generator = "uuid")
  @GenericGenerator(name = "uuid", strategy = "uuid2")
  private String id;

  private String name;

  private String type;

  @Lob
  private byte[] data;

  public FileDB() {
  }

  public FileDB(String name, String type, byte[] data) {
    this.name = name;
    this.type = type;
    this.data = data;
  }

  public String getId() {
    return id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getType() {
    return type;
  }

  public void setType(String type) {
    this.type = type;
  }

  public byte[] getData() {
    return data;
  }

  public void setData(byte[] data) {
    this.data = data;
  }

}
2 anotasi. LOB adalah tipe data untuk menyimpan data objek besar. Ada dua jenis LOB. BLOB dan KLOB

  • BLOB adalah untuk menyimpan data biner
  • CLOB adalah untuk menyimpan data teks

Buat Repositori

Di bawah paket repositori, buat antarmuka

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
_9 yang memperluas
<dependency>
	<groupId>org.postgresql</groupId>
	<artifactId>postgresql</artifactId>
	<scope>runtime</scope>
</dependency>
0

repositori/FileDBRepositori. Jawa

package com.bezkoder.spring.files.upload.db.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.bezkoder.spring.files.upload.db.model.FileDB;

@Repository
public interface FileDBRepository extends JpaRepository<FileDB, String> {

}

Sekarang kita dapat menggunakan

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
_9 dengan metode
<dependency>
	<groupId>org.postgresql</groupId>
	<artifactId>postgresql</artifactId>
	<scope>runtime</scope>
</dependency>
0 seperti.
package com.bezkoder.spring.files.upload.db.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name = "files")
public class FileDB {
  @Id
  @GeneratedValue(generator = "uuid")
  @GenericGenerator(name = "uuid", strategy = "uuid2")
  private String id;

  private String name;

  private String type;

  @Lob
  private byte[] data;

  public FileDB() {
  }

  public FileDB(String name, String type, byte[] data) {
    this.name = name;
    this.type = type;
    this.data = data;
  }

  public String getId() {
    return id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getType() {
    return type;
  }

  public void setType(String type) {
    this.type = type;
  }

  public byte[] getData() {
    return data;
  }

  public void setData(byte[] data) {
    this.data = data;
  }

}
7,
package com.bezkoder.spring.files.upload.db.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name = "files")
public class FileDB {
  @Id
  @GeneratedValue(generator = "uuid")
  @GenericGenerator(name = "uuid", strategy = "uuid2")
  private String id;

  private String name;

  private String type;

  @Lob
  private byte[] data;

  public FileDB() {
  }

  public FileDB(String name, String type, byte[] data) {
    this.name = name;
    this.type = type;
    this.data = data;
  }

  public String getId() {
    return id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getType() {
    return type;
  }

  public void setType(String type) {
    this.type = type;
  }

  public byte[] getData() {
    return data;
  }

  public void setData(byte[] data) {
    this.data = data;
  }

}
8,
package com.bezkoder.spring.files.upload.db.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name = "files")
public class FileDB {
  @Id
  @GeneratedValue(generator = "uuid")
  @GenericGenerator(name = "uuid", strategy = "uuid2")
  private String id;

  private String name;

  private String type;

  @Lob
  private byte[] data;

  public FileDB() {
  }

  public FileDB(String name, String type, byte[] data) {
    this.name = name;
    this.type = type;
    this.data = data;
  }

  public String getId() {
    return id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getType() {
    return type;
  }

  public void setType(String type) {
    this.type = type;
  }

  public byte[] getData() {
    return data;
  }

  public void setData(byte[] data) {
    this.data = data;
  }

}
9

Buat Layanan untuk Penyimpanan File

Layanan Penyimpanan File akan menggunakan

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
_9 untuk menyediakan metode berikut

  • package com.bezkoder.spring.files.upload.db.repository;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;
    
    import com.bezkoder.spring.files.upload.db.model.FileDB;
    
    @Repository
    public interface FileDBRepository extends JpaRepository<FileDB, String> {
    
    }
    
    1. menerima objek
    <dependency>
    	<groupId>mysql</groupId>
    	<artifactId>mysql-connector-java</artifactId>
    	<scope>runtime</scope>
    </dependency>
    
    3, ubah ke objek
    <dependency>
    	<groupId>mysql</groupId>
    	<artifactId>mysql-connector-java</artifactId>
    	<scope>runtime</scope>
    </dependency>
    
    8 dan simpan ke Database
  • package com.bezkoder.spring.files.upload.db.repository;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;
    
    import com.bezkoder.spring.files.upload.db.model.FileDB;
    
    @Repository
    public interface FileDBRepository extends JpaRepository<FileDB, String> {
    
    }
    
    4. mengembalikan objek
    <dependency>
    	<groupId>mysql</groupId>
    	<artifactId>mysql-connector-java</artifactId>
    	<scope>runtime</scope>
    </dependency>
    
    _8 dengan Id yang diberikan
  • package com.bezkoder.spring.files.upload.db.repository;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;
    
    import com.bezkoder.spring.files.upload.db.model.FileDB;
    
    @Repository
    public interface FileDBRepository extends JpaRepository<FileDB, String> {
    
    }
    
    6. mengembalikan semua file yang disimpan sebagai daftar kode> objek FileDB

layanan/Layanan Penyimpanan File. Jawa

package com.bezkoder.spring.files.upload.db.service;

import java.io.IOException;
import java.util.stream.Stream;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import com.bezkoder.spring.files.upload.db.model.FileDB;
import com.bezkoder.spring.files.upload.db.repository.FileDBRepository;

@Service
public class FileStorageService {

  @Autowired
  private FileDBRepository fileDBRepository;

  public FileDB store(MultipartFile file) throws IOException {
    String fileName = StringUtils.cleanPath(file.getOriginalFilename());
    FileDB FileDB = new FileDB(fileName, file.getContentType(), file.getBytes());

    return fileDBRepository.save(FileDB);
  }

  public FileDB getFile(String id) {
    return fileDBRepository.findById(id).get();
  }
  
  public Stream<FileDB> getAllFiles() {
    return fileDBRepository.findAll().stream();
  }
}

Tentukan Kelas Informasi Respons

Mari buat dua kelas dalam paket pesan. Pengontrol akan menggunakan kelas-kelas ini untuk mengirim pesan melalui respons HTTP

  • <dependency>
    	<groupId>org.postgresql</groupId>
    	<artifactId>postgresql</artifactId>
    	<scope>runtime</scope>
    </dependency>
    
    6. berisi nama, url, jenis, ukuran
  • package com.bezkoder.spring.files.upload.db.repository;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;
    
    import com.bezkoder.spring.files.upload.db.model.FileDB;
    
    @Repository
    public interface FileDBRepository extends JpaRepository<FileDB, String> {
    
    }
    
    8 untuk pesan pemberitahuan/informasi

pesan/Respon File. Jawa

package com.bezkoder.spring.files.upload.db.message;

public class ResponseFile {
  private String name;
  private String url;
  private String type;
  private long size;

  public ResponseFile(String name, String url, String type, long size) {
    this.name = name;
    this.url = url;
    this.type = type;
    this.size = size;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getUrl() {
    return url;
  }

  public void setUrl(String url) {
    this.url = url;
  }

  public String getType() {
    return type;
  }

  public void setType(String type) {
    this.type = type;
  }

  public long getSize() {
    return size;
  }

  public void setSize(long size) {
    this.size = size;
  }
}

pesan/ResponseMessage. Jawa

package com.bezkoder.spring.files.upload.db.message;

public class ResponseMessage {
  private String message;

  public ResponseMessage(String message) {
    this.message = message;
  }

  public String getMessage() {
    return message;
  }

  public void setMessage(String message) {
    this.message = message;
  }

}

Buat Pengontrol untuk mengunggah & mengunduh File ke Database

Dalam paket pengontrol, kami membuat kelas ________26______9

pengontrol/Pengontrol File. Jawa

package com.bezkoder.spring.files.upload.db.controller;

import java.util.List;
import java.util.stream.Collectors;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;

import com.bezkoder.spring.files.upload.db.service.FileStorageService;
import com.bezkoder.spring.files.upload.db.message.ResponseFile;
import com.bezkoder.spring.files.upload.db.message.ResponseMessage;
import com.bezkoder.spring.files.upload.db.model.FileDB;

@Controller
@CrossOrigin("http://localhost:8081")
public class FileController {

  @Autowired
  private FileStorageService storageService;

  @PostMapping("/upload")
  public ResponseEntity<ResponseMessage> uploadFile(@RequestParam("file") MultipartFile file) {
    String message = "";
    try {
      storageService.store(file);

      message = "Uploaded the file successfully: " + file.getOriginalFilename();
      return ResponseEntity.status(HttpStatus.OK).body(new ResponseMessage(message));
    } catch (Exception e) {
      message = "Could not upload the file: " + file.getOriginalFilename() + "!";
      return ResponseEntity.status(HttpStatus.EXPECTATION_FAILED).body(new ResponseMessage(message));
    }
  }

  @GetMapping("/files")
  public ResponseEntity<List<ResponseFile>> getListFiles() {
    List<ResponseFile> files = storageService.getAllFiles().map(dbFile -> {
      String fileDownloadUri = ServletUriComponentsBuilder
          .fromCurrentContextPath()
          .path("/files/")
          .path(dbFile.getId())
          .toUriString();

      return new ResponseFile(
          dbFile.getName(),
          fileDownloadUri,
          dbFile.getType(),
          dbFile.getData().length);
    }).collect(Collectors.toList());

    return ResponseEntity.status(HttpStatus.OK).body(files);
  }

  @GetMapping("/files/{id}")
  public ResponseEntity<byte[]> getFile(@PathVariable String id) {
    FileDB fileDB = storageService.getFile(id);

    return ResponseEntity.ok()
        .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + fileDB.getName() + "\"")
        .body(fileDB.getData());
  }
}

package com.bezkoder.spring.files.upload.db.service;

import java.io.IOException;
import java.util.stream.Stream;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import com.bezkoder.spring.files.upload.db.model.FileDB;
import com.bezkoder.spring.files.upload.db.repository.FileDBRepository;

@Service
public class FileStorageService {

  @Autowired
  private FileDBRepository fileDBRepository;

  public FileDB store(MultipartFile file) throws IOException {
    String fileName = StringUtils.cleanPath(file.getOriginalFilename());
    FileDB FileDB = new FileDB(fileName, file.getContentType(), file.getBytes());

    return fileDBRepository.save(FileDB);
  }

  public FileDB getFile(String id) {
    return fileDBRepository.findById(id).get();
  }
  
  public Stream<FileDB> getAllFiles() {
    return fileDBRepository.findAll().stream();
  }
}
_0 adalah untuk mengonfigurasi asal yang diizinkan
package com.bezkoder.spring.files.upload.db.service;

import java.io.IOException;
import java.util.stream.Stream;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import com.bezkoder.spring.files.upload.db.model.FileDB;
import com.bezkoder.spring.files.upload.db.repository.FileDBRepository;

@Service
public class FileStorageService {

  @Autowired
  private FileDBRepository fileDBRepository;

  public FileDB store(MultipartFile file) throws IOException {
    String fileName = StringUtils.cleanPath(file.getOriginalFilename());
    FileDB FileDB = new FileDB(fileName, file.getContentType(), file.getBytes());

    return fileDBRepository.save(FileDB);
  }

  public FileDB getFile(String id) {
    return fileDBRepository.findById(id).get();
  }
  
  public Stream<FileDB> getAllFiles() {
    return fileDBRepository.findAll().stream();
  }
}
_1 anotasi digunakan untuk mendefinisikan controller
package com.bezkoder.spring.files.upload.db.service;

import java.io.IOException;
import java.util.stream.Stream;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import com.bezkoder.spring.files.upload.db.model.FileDB;
import com.bezkoder.spring.files.upload.db.repository.FileDBRepository;

@Service
public class FileStorageService {

  @Autowired
  private FileDBRepository fileDBRepository;

  public FileDB store(MultipartFile file) throws IOException {
    String fileName = StringUtils.cleanPath(file.getOriginalFilename());
    FileDB FileDB = new FileDB(fileName, file.getContentType(), file.getBytes());

    return fileDBRepository.save(FileDB);
  }

  public FileDB getFile(String id) {
    return fileDBRepository.findById(id).get();
  }
  
  public Stream<FileDB> getAllFiles() {
    return fileDBRepository.findAll().stream();
  }
}
2 dan
package com.bezkoder.spring.files.upload.db.service;

import java.io.IOException;
import java.util.stream.Stream;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import com.bezkoder.spring.files.upload.db.model.FileDB;
import com.bezkoder.spring.files.upload.db.repository.FileDBRepository;

@Service
public class FileStorageService {

  @Autowired
  private FileDBRepository fileDBRepository;

  public FileDB store(MultipartFile file) throws IOException {
    String fileName = StringUtils.cleanPath(file.getOriginalFilename());
    FileDB FileDB = new FileDB(fileName, file.getContentType(), file.getBytes());

    return fileDBRepository.save(FileDB);
  }

  public FileDB getFile(String id) {
    return fileDBRepository.findById(id).get();
  }
  
  public Stream<FileDB> getAllFiles() {
    return fileDBRepository.findAll().stream();
  }
}
3 adalah untuk memetakan permintaan HTTP GET dan POST ke metode penangan tertentu

  • POSTING / unggah.
    package com.bezkoder.spring.files.upload.db.service;
    
    import java.io.IOException;
    import java.util.stream.Stream;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.util.StringUtils;
    import org.springframework.web.multipart.MultipartFile;
    
    import com.bezkoder.spring.files.upload.db.model.FileDB;
    import com.bezkoder.spring.files.upload.db.repository.FileDBRepository;
    
    @Service
    public class FileStorageService {
    
      @Autowired
      private FileDBRepository fileDBRepository;
    
      public FileDB store(MultipartFile file) throws IOException {
        String fileName = StringUtils.cleanPath(file.getOriginalFilename());
        FileDB FileDB = new FileDB(fileName, file.getContentType(), file.getBytes());
    
        return fileDBRepository.save(FileDB);
      }
    
      public FileDB getFile(String id) {
        return fileDBRepository.findById(id).get();
      }
      
      public Stream<FileDB> getAllFiles() {
        return fileDBRepository.findAll().stream();
      }
    }
    
    4
  • DAPATKAN / file.
    package com.bezkoder.spring.files.upload.db.service;
    
    import java.io.IOException;
    import java.util.stream.Stream;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.util.StringUtils;
    import org.springframework.web.multipart.MultipartFile;
    
    import com.bezkoder.spring.files.upload.db.model.FileDB;
    import com.bezkoder.spring.files.upload.db.repository.FileDBRepository;
    
    @Service
    public class FileStorageService {
    
      @Autowired
      private FileDBRepository fileDBRepository;
    
      public FileDB store(MultipartFile file) throws IOException {
        String fileName = StringUtils.cleanPath(file.getOriginalFilename());
        FileDB FileDB = new FileDB(fileName, file.getContentType(), file.getBytes());
    
        return fileDBRepository.save(FileDB);
      }
    
      public FileDB getFile(String id) {
        return fileDBRepository.findById(id).get();
      }
      
      public Stream<FileDB> getAllFiles() {
        return fileDBRepository.findAll().stream();
      }
    }
    
    5
  • DAPATKAN /file/[id].
    package com.bezkoder.spring.files.upload.db.service;
    
    import java.io.IOException;
    import java.util.stream.Stream;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.util.StringUtils;
    import org.springframework.web.multipart.MultipartFile;
    
    import com.bezkoder.spring.files.upload.db.model.FileDB;
    import com.bezkoder.spring.files.upload.db.repository.FileDBRepository;
    
    @Service
    public class FileStorageService {
    
      @Autowired
      private FileDBRepository fileDBRepository;
    
      public FileDB store(MultipartFile file) throws IOException {
        String fileName = StringUtils.cleanPath(file.getOriginalFilename());
        FileDB FileDB = new FileDB(fileName, file.getContentType(), file.getBytes());
    
        return fileDBRepository.save(FileDB);
      }
    
      public FileDB getFile(String id) {
        return fileDBRepository.findById(id).get();
      }
      
      public Stream<FileDB> getAllFiles() {
        return fileDBRepository.findAll().stream();
      }
    }
    
    6

– Kami menggunakan

package com.bezkoder.spring.files.upload.db.service;

import java.io.IOException;
import java.util.stream.Stream;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import com.bezkoder.spring.files.upload.db.model.FileDB;
import com.bezkoder.spring.files.upload.db.repository.FileDBRepository;

@Service
public class FileStorageService {

  @Autowired
  private FileDBRepository fileDBRepository;

  public FileDB store(MultipartFile file) throws IOException {
    String fileName = StringUtils.cleanPath(file.getOriginalFilename());
    FileDB FileDB = new FileDB(fileName, file.getContentType(), file.getBytes());

    return fileDBRepository.save(FileDB);
  }

  public FileDB getFile(String id) {
    return fileDBRepository.findById(id).get();
  }
  
  public Stream<FileDB> getAllFiles() {
    return fileDBRepository.findAll().stream();
  }
}
_7 untuk menyuntikkan implementasi kacang
package com.bezkoder.spring.files.upload.db.service;

import java.io.IOException;
import java.util.stream.Stream;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import com.bezkoder.spring.files.upload.db.model.FileDB;
import com.bezkoder.spring.files.upload.db.repository.FileDBRepository;

@Service
public class FileStorageService {

  @Autowired
  private FileDBRepository fileDBRepository;

  public FileDB store(MultipartFile file) throws IOException {
    String fileName = StringUtils.cleanPath(file.getOriginalFilename());
    FileDB FileDB = new FileDB(fileName, file.getContentType(), file.getBytes());

    return fileDBRepository.save(FileDB);
  }

  public FileDB getFile(String id) {
    return fileDBRepository.findById(id).get();
  }
  
  public Stream<FileDB> getAllFiles() {
    return fileDBRepository.findAll().stream();
  }
}
8 ke variabel lokal

Konfigurasi Sumber Data Musim Semi, JPA, Hibernasi

Di bawah folder src/main/resources, buka aplikasi. properti dan menulis baris ini

– Untuk MySQL

spring.datasource.url= jdbc:mysql://localhost:3306/testdb?useSSL=false
spring.datasource.username= root
spring.datasource.password= 123456

spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQL5InnoDBDialect

# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto= update

– Untuk PostgreSQL

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
0
  • package com.bezkoder.spring.files.upload.db.service;
    
    import java.io.IOException;
    import java.util.stream.Stream;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.util.StringUtils;
    import org.springframework.web.multipart.MultipartFile;
    
    import com.bezkoder.spring.files.upload.db.model.FileDB;
    import com.bezkoder.spring.files.upload.db.repository.FileDBRepository;
    
    @Service
    public class FileStorageService {
    
      @Autowired
      private FileDBRepository fileDBRepository;
    
      public FileDB store(MultipartFile file) throws IOException {
        String fileName = StringUtils.cleanPath(file.getOriginalFilename());
        FileDB FileDB = new FileDB(fileName, file.getContentType(), file.getBytes());
    
        return fileDBRepository.save(FileDB);
      }
    
      public FileDB getFile(String id) {
        return fileDBRepository.findById(id).get();
      }
      
      public Stream<FileDB> getAllFiles() {
        return fileDBRepository.findAll().stream();
      }
    }
    
    9 &
    package com.bezkoder.spring.files.upload.db.message;
    
    public class ResponseFile {
      private String name;
      private String url;
      private String type;
      private long size;
    
      public ResponseFile(String name, String url, String type, long size) {
        this.name = name;
        this.url = url;
        this.type = type;
        this.size = size;
      }
    
      public String getName() {
        return name;
      }
    
      public void setName(String name) {
        this.name = name;
      }
    
      public String getUrl() {
        return url;
      }
    
      public void setUrl(String url) {
        this.url = url;
      }
    
      public String getType() {
        return type;
      }
    
      public void setType(String type) {
        this.type = type;
      }
    
      public long getSize() {
        return size;
      }
    
      public void setSize(long size) {
        this.size = size;
      }
    }
    
    0 properti sama dengan instalasi database Anda
  • Spring Boot menggunakan Hibernate untuk implementasi JPA, kami mengonfigurasi
    package com.bezkoder.spring.files.upload.db.message;
    
    public class ResponseFile {
      private String name;
      private String url;
      private String type;
      private long size;
    
      public ResponseFile(String name, String url, String type, long size) {
        this.name = name;
        this.url = url;
        this.type = type;
        this.size = size;
      }
    
      public String getName() {
        return name;
      }
    
      public void setName(String name) {
        this.name = name;
      }
    
      public String getUrl() {
        return url;
      }
    
      public void setUrl(String url) {
        this.url = url;
      }
    
      public String getType() {
        return type;
      }
    
      public void setType(String type) {
        this.type = type;
      }
    
      public long getSize() {
        return size;
      }
    
      public void setSize(long size) {
        this.size = size;
      }
    }
    
    1 untuk MySQL atau
    package com.bezkoder.spring.files.upload.db.message;
    
    public class ResponseFile {
      private String name;
      private String url;
      private String type;
      private long size;
    
      public ResponseFile(String name, String url, String type, long size) {
        this.name = name;
        this.url = url;
        this.type = type;
        this.size = size;
      }
    
      public String getName() {
        return name;
      }
    
      public void setName(String name) {
        this.name = name;
      }
    
      public String getUrl() {
        return url;
      }
    
      public void setUrl(String url) {
        this.url = url;
      }
    
      public String getType() {
        return type;
      }
    
      public void setType(String type) {
        this.type = type;
      }
    
      public long getSize() {
        return size;
      }
    
      public void setSize(long size) {
        this.size = size;
      }
    }
    
    2 untuk PostgreSQL
  • package com.bezkoder.spring.files.upload.db.message;
    
    public class ResponseFile {
      private String name;
      private String url;
      private String type;
      private long size;
    
      public ResponseFile(String name, String url, String type, long size) {
        this.name = name;
        this.url = url;
        this.type = type;
        this.size = size;
      }
    
      public String getName() {
        return name;
      }
    
      public void setName(String name) {
        this.name = name;
      }
    
      public String getUrl() {
        return url;
      }
    
      public void setUrl(String url) {
        this.url = url;
      }
    
      public String getType() {
        return type;
      }
    
      public void setType(String type) {
        this.type = type;
      }
    
      public long getSize() {
        return size;
      }
    
      public void setSize(long size) {
        this.size = size;
      }
    }
    
    3 digunakan untuk inisialisasi database. Kami menetapkan nilai ke
    package com.bezkoder.spring.files.upload.db.message;
    
    public class ResponseFile {
      private String name;
      private String url;
      private String type;
      private long size;
    
      public ResponseFile(String name, String url, String type, long size) {
        this.name = name;
        this.url = url;
        this.type = type;
        this.size = size;
      }
    
      public String getName() {
        return name;
      }
    
      public void setName(String name) {
        this.name = name;
      }
    
      public String getUrl() {
        return url;
      }
    
      public void setUrl(String url) {
        this.url = url;
      }
    
      public String getType() {
        return type;
      }
    
      public void setType(String type) {
        this.type = type;
      }
    
      public long getSize() {
        return size;
      }
    
      public void setSize(long size) {
        this.size = size;
      }
    }
    
    4 nilai sehingga tabel akan dibuat dalam database secara otomatis sesuai dengan model data yang ditentukan. Setiap perubahan pada model juga akan memicu pembaruan pada tabel. Untuk produksi, properti ini harus
    package com.bezkoder.spring.files.upload.db.message;
    
    public class ResponseFile {
      private String name;
      private String url;
      private String type;
      private long size;
    
      public ResponseFile(String name, String url, String type, long size) {
        this.name = name;
        this.url = url;
        this.type = type;
        this.size = size;
      }
    
      public String getName() {
        return name;
      }
    
      public void setName(String name) {
        this.name = name;
      }
    
      public String getUrl() {
        return url;
      }
    
      public void setUrl(String url) {
        this.url = url;
      }
    
      public String getType() {
        return type;
      }
    
      public void setType(String type) {
        this.type = type;
      }
    
      public long getSize() {
        return size;
      }
    
      public void setSize(long size) {
        this.size = size;
      }
    }
    
    5

Konfigurasi File Multipart untuk Servlet

Mari tentukan ukuran file maksimum yang dapat diunggah di aplikasi. properti sebagai berikut

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
_1

package com.bezkoder.spring.files.upload.db.message;

public class ResponseFile {
  private String name;
  private String url;
  private String type;
  private long size;

  public ResponseFile(String name, String url, String type, long size) {
    this.name = name;
    this.url = url;
    this.type = type;
    this.size = size;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getUrl() {
    return url;
  }

  public void setUrl(String url) {
    this.url = url;
  }

  public String getType() {
    return type;
  }

  public void setType(String type) {
    this.type = type;
  }

  public long getSize() {
    return size;
  }

  public void setSize(long size) {
    this.size = size;
  }
}
6. ukuran file maks untuk setiap permintaan
package com.bezkoder.spring.files.upload.db.message;

public class ResponseFile {
  private String name;
  private String url;
  private String type;
  private long size;

  public ResponseFile(String name, String url, String type, long size) {
    this.name = name;
    this.url = url;
    this.type = type;
    this.size = size;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getUrl() {
    return url;
  }

  public void setUrl(String url) {
    this.url = url;
  }

  public String getType() {
    return type;
  }

  public void setType(String type) {
    this.type = type;
  }

  public long getSize() {
    return size;
  }

  public void setSize(long size) {
    this.size = size;
  }
}
_7. ukuran permintaan maks untuk multipart/formulir-data

Tangani Pengecualian Unggah File

Di sinilah kami menangani kasus di mana permintaan melebihi Ukuran Unggahan Maks. Sistem akan melempar

package com.bezkoder.spring.files.upload.db.message;

public class ResponseFile {
  private String name;
  private String url;
  private String type;
  private long size;

  public ResponseFile(String name, String url, String type, long size) {
    this.name = name;
    this.url = url;
    this.type = type;
    this.size = size;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getUrl() {
    return url;
  }

  public void setUrl(String url) {
    this.url = url;
  }

  public String getType() {
    return type;
  }

  public void setType(String type) {
    this.type = type;
  }

  public long getSize() {
    return size;
  }

  public void setSize(long size) {
    this.size = size;
  }
}
8 dan kami akan menggunakan
package com.bezkoder.spring.files.upload.db.message;

public class ResponseFile {
  private String name;
  private String url;
  private String type;
  private long size;

  public ResponseFile(String name, String url, String type, long size) {
    this.name = name;
    this.url = url;
    this.type = type;
    this.size = size;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getUrl() {
    return url;
  }

  public void setUrl(String url) {
    this.url = url;
  }

  public String getType() {
    return type;
  }

  public void setType(String type) {
    this.type = type;
  }

  public long getSize() {
    return size;
  }

  public void setSize(long size) {
    this.size = size;
  }
}
9 dengan
package com.bezkoder.spring.files.upload.db.message;

public class ResponseMessage {
  private String message;

  public ResponseMessage(String message) {
    this.message = message;
  }

  public String getMessage() {
    return message;
  }

  public void setMessage(String message) {
    this.message = message;
  }

}
0anotasi untuk menangani pengecualian

pengecualian/FileUploadExceptionAdvice. Jawa

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
_2

Jalankan & Uji

Jalankan aplikasi Spring Boot dengan perintah.

package com.bezkoder.spring.files.upload.db.message;

public class ResponseMessage {
  private String message;

  public ResponseMessage(String message) {
    this.message = message;
  }

  public String getMessage() {
    return message;
  }

  public void setMessage(String message) {
    this.message = message;
  }

}
1
Mari gunakan Postman untuk membuat beberapa permintaan

– Unggah beberapa file

Bagaimana cara mengunduh file dari mysql?
Bagaimana cara mengunduh file dari mysql?

– Unggah file dengan ukuran lebih besar dari ukuran file maks (2MB)

Bagaimana cara mengunduh file dari mysql?
Bagaimana cara mengunduh file dari mysql?

– Periksa tabel file di Database

Bagaimana cara mengunduh file dari mysql?
Bagaimana cara mengunduh file dari mysql?

– Ambil daftar informasi File

Bagaimana cara mengunduh file dari mysql?
Bagaimana cara mengunduh file dari mysql?

– Sekarang Anda dapat mengunduh file apa pun dari salah satu jalur di atas
Sebagai contoh.

package com.bezkoder.spring.files.upload.db.message;

public class ResponseMessage {
  private String message;

  public ResponseMessage(String message) {
    this.message = message;
  }

  public String getMessage() {
    return message;
  }

  public void setMessage(String message) {
    this.message = message;
  }

}
2

Kesimpulan

Hari ini kita telah belajar cara membuat Aplikasi Spring Boot untuk mengunggah file multipart dan mendapatkan informasi file dengan folder statis melalui Restful API

Bagaimana cara mengunduh data dari MySQL?

Ekspor database MySQL .
Masuk ke server Anda melalui SSH
Gunakan perintah cd untuk menavigasi ke direktori tempat pengguna Anda memiliki akses tulis. .
Ekspor database dengan menjalankan perintah berikut. mysqldump --add-drop-table -h internal-db. s00000. gridserver. com -u nama pengguna -p dbname > dbname. sql

Bagaimana cara menyimpan file MySQL?

Simpan Hasil MySQL ke File . Sebagai contoh. PILIH id, first_name, last_name DARI pelanggan KE OUTFILE '/temp/myoutput. add the words INTO OUTFILE, followed by a filename, to the end of the SELECT statement. For example: SELECT id, first_name, last_name FROM customer INTO OUTFILE '/temp/myoutput.

Bagaimana cara mengunduh MySQL langkah demi langkah?

Proses instalasi mirip dengan sistem operasi lain. .
Buka situs web MySQL di browser. Klik tautan berikut. Unduhan MySQL
Pilih opsi Download
Pilih Pemasang MySQL untuk Windows
Pilih penginstal yang diinginkan dan klik unduh

Bagaimana cara mengunduh file dari database MySQL menggunakan PHP?

php $nama= $_GET['nama']; . Transfer Berkas'); . aplikasi/octet-stream'); . lampiran;