Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to upload file and save file in db use spring boot and jpa?

Tags:

java

spring

jpa

I am new in spring boot.I wanna upload a small file use spring boot and save it in db use jpa. But I don't have good resolution. My program like these:
database table:

CREATE TABLE `report` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `logo` BLOB NOT NULL,
  `created_time` int(10) NOT NULL,
  `updated_time` int(10) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8

jpa bean:
Report.java

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Lob;
import javax.persistence.Table;
import java.io.Serializable;

@Entity
@Table(name="mf_report")
public class Report implements Serializable{
    @Column(name="id")
    private int id;

    @Column(name="name")
    private String name;

    @Lob
    @Column(name="logo", length=100000)
    private byte[] logo;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public byte[] getLogo() {
        return logo;
    }

    public void setLogo(byte[] logo) {
        this.logo = logo;
    }
}

ReportReposity.java:

@Repository
public interface ReportRepository extends CrudRepository<Report,Long>{
}

ReportService.java:

@Service
public class ReportService extends CrudService<Report, ReportRepository> {

    private final static Logger logger = LoggerFactory.getLogger(ReportService.class);

    @Override
    @Autowired
    public void setRepo(ReportRepository repo) {
        this.repo = repo;
    }

    @Override
    public Report copy(Report from, Report to) {
        to = from;
        return to;
    }

    @Autowired
    private ReportRepository reportRepository;

    public boolean saveReportByRequestBean(ReportAddQueryRequest reportBeanQueryRequest){
    try {
        Report report = new Report();
        report.setName(reportBeanQueryRequest.getName());
        report.setLogo(reportBeanQueryRequest.getLogo());
        long now = System.currentTimeMillis()/1000;
        report.setCreateTime(now);
        report.setUpdateTime(now);
        this.save(report);
    }catch (Exception e){
        logger.error("save report error:", e);
        return false;
    }
    return true;
}
}

ReportParamBean.java:

import org.hibernate.validator.constraints.NotEmpty;
import java.io.Serializable;

public class ReportParamBean extends AbsRequest implements Serializable {
    private long reportId;
    @NotEmpty(message = "Param 'name' can't be NULL")
    private String name;
    private String logo;// In fact, I don't know what type should logo be, File or ?
}

AbsRequest.java:

public class AbsRequest implements Serializable {
    private static final long serialVersionUID = -8928786145900600868L;
    @NotEmpty(message = "Param 'token' can't be NULL")
    @NotNull
    private String token;
    @NotEmpty(message = "Param 'sign' can't be NULL")
    private String sign;
    @Min(value = 1, message = "Param 'time' is invalid")
    private Long time;
    @Min(value = -1, message = "Param 'nodeId' is invalid")
    @NotNull(message = "Param 'nodeId' can't be NULL")
    private Long nodeId;
    private String nodeName;
    @Override
    public String toString() {
        return new ToStringBuilder(this)
                .append("token", token)
                .append("sign", sign)
                .append("time", time)
                .append("nodeId", nodeId)
                .append("nodeName", nodeName)
                .toString();
    }

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }

    public String getSign() {
        return sign;
    }

    public void setSign(String sign) {
        this.sign = sign;
    }

    public Long getTime() {
        return time;
    }

    public void setTime(Long time) {
        this.time = time;
    }

    public Long getNodeId() {
        return nodeId;
    }

    public void setNodeId(Long nodeId) {
        this.nodeId = nodeId;
    }

    public String getNodeName() {
        return nodeName;
    }

    public void setNodeName(String nodeName) {
        this.nodeName = nodeName;
    }
}

ReportController.java:

@RestController
@RequestMapping("/api")
public class ReportController {

    @Autowired
    private ReportService reportService;

    @RequestMapping(value = "/report", method = RequestMethod.POST, produces = MediaTypes.JSON_UTF_8)
    public JSONObject createReport(@RequestBody ReportAddQueryRequest reportBeanQueryRequest){
        boolean result = reportService.saveReportByRequestBean(reportBeanQueryRequest);
        if (!result){
            return ResponseWrapper.buildResponse(RTCodeEnum.C_SERVICE_NOT_AVAILABLE, "add report failed");
        }
        return ResponseWrapper.buildResponse(RTCodeEnum.C_OK, "add report success");
    }
}

I don't know whether I can post a file and other params to server in just one post request,then save the data in db.Could you give me resolution. Special thanks.

like image 865
Karl Doenitz Avatar asked Sep 09 '16 16:09

Karl Doenitz


People also ask

How to upload files to/from database using Spring Boot REST APIs?

suppose you want to upload a file's data to database then you could do it in two steps: upload your file as multipart file in your controller class. Show activity on this post. I have made an app to upload, download and delete files to/from database using Spring Boot Rest APIs.

How to upload a file to a database in spring?

Use Spring's multipart file. In simple implementation you can then get InputStream from it, read the content of the file (being saved on hdd) to a byte array and save it to database. Show activity on this post. Consider up voting if this answer help you. suppose you want to upload a file's data to database then you could do it in two steps:

What data is stored in Spring Boot application?

Our Spring Boot Application will provide APIs for: The uploaded files will be stored in PostgreSQL/MySQL Database files table with these fields: id, name, type and data as BLOB type (Binary Large Object is for storing binary data like file, image, audio, or video). Let me explain it briefly.

How do I upload multiple files in Spring Boot?

Spring Boot File Upload 1 Single File Upload to Local File System in Spring Boot Rest. ... 2 Multiple File Uploads to Local File System in Spring Boot Rest. The multiple files upload internally invokes above method to repeat the single file upload. ... 3 Adding Extra Parameters with FileUpload. ... 4 Spring Boot File Upload to Database. ...


1 Answers

Use Spring's multipart file. In simple implementation you can then get InputStream from it, read the content of the file (being saved on hdd) to a byte array and save it to database.

like image 77
ps-aux Avatar answered Oct 19 '22 21:10

ps-aux