当前位置: 首页 > 知识库问答 >
问题:

如何上传文件和保存文件在数据库中使用Spring引导和jpa?

段干宜
2023-03-14

我是新穿春靴的。我想上传一个使用spring boot的小文件,并将其保存在db use jpa中。但我没有好的决心。我的程序如下:
数据库表:

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


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;
    }
}

报告eposity.java:

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

报告ervice.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 ?
}

ABS请求。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");
    }
}

我不知道我是否可以在一个post请求中将文件和其他参数发布到服务器,然后将数据保存到db中。你能给我下决心吗。特别感谢。

共有2个答案

白光耀
2023-03-14

如果这个答案对你有帮助,考虑投票。

假设您想将文件的数据上传到数据库,那么您可以通过两个步骤完成:

>

@PostMapping("/uploadYourFile")

public String uploadFile( MultipartFile file) throws IOException {
    FileInputStream inputStream = (FileInputStream) file.getInputStream();

    //you can use inputStream object which currently has your "file" data
    // you can process this to fetch your data.
    return  "file uploaded successfully ";
}

读取上传的文件“inputStream”获取数据并通过数据库查询将其插入数据库

丰景同
2023-03-14

使用Spring的多部分文件。在简单的实现中,您可以从中获取InputStream,将文件的内容(保存在hdd上)读取到字节数组并保存到数据库。

 类似资料:
  • 问题内容: 我正在使用此代码上传文件(图像到文件夹) 当文件(图像)保存在指定路径时…如果我想用某个所需的名称保存文件…。 我曾尝试更换此 有了这个 但是它不起作用 问题答案: 你可以试试看

  • 问题内容: 我正在使用Spring MVC,这是我的方法: 我需要在邮递员和文件中传递会话ID。我怎样才能做到这一点? 问题答案: 在邮递员中,将方法类型设置为 POST 。 然后选择主体->表单数据->输入参数名称(根据您的代码 文件 ) 且右侧旁边值列,会出现 下拉菜单“文本文件” ,选择 文件 。选择您的图像文件并将其发布。 对于其他基于 “文本”的参数 ,您可以像通常使用postman一样

  • 我需要上传文件使用角和Spring引导。 角度服务: 我的后端Rest服务如下: 所以不能理解为什么它不起作用! 谢谢

  • 问题内容: 我有这个项目: 导入文件 连接到SQL Server数据库 将所有数据转移到数据库中 文本文件按选项卡划分为四个字段,例如数据库。 我已经完成了使用富文本框并将所有数据保存在字符串中的第一步。我的想法是将字符串拆分为每行并将其保存在数组中,然后:如何拆分每一行,以便可以正确保存字段?如何将SQL Server上的数据库连接到C#上的项目? 问题答案: 让我们一次解决这一步骤… 获取数据

  • 我需要上传一个文件并读取内容,使用spring mvc很容易,但使用spring webflux,我不知道如何处理FilePart和DataBuffer流量 我期待着这样的回报:

  • 我正在尝试使用多部分实体方法上传文件。但它失败,错误说{“错误”:“文件参数值'无'无效”} 我的代码是: File File = new File(" C:/Users/SST-06/Desktop/new . txt "); 我的实体文件包含所有提到的参数。 -hkYO-pblk 0 uqlxjtvklrbkosxz 7 mye-8 wbvbvanx Content-Disposition:f