<form:form id="companyForm" enctype="multipart/form-data" method="POST"
action="/DTR/secured/admin/company/save" commandName = "command">
因此,我被要求将图像文件保存到数据库中,但由于数据库没有图像文件数据类型,我必须使用多部分。有人可以向我解释它是如何工作的吗?我要怎么做呢?如何检索数据然后将其再次转换为图像?我找不到可以帮助我的文章,如果有,请随时发表评论。谢谢。
最佳答案
您可能应该阅读有关 BLOB
等类型的更多信息。
您的问题结合了两个主题:
- 如何使用 JSP 上传媒体
- 如何在数据库中存储图像
这两个问题已在此网站上多次得到解答,但您可以在下面的一个地方找到一些说明。因为您没有提供有关您使用哪个数据库的信息,所以我将解释如何使其在 Oracle 中工作。
1.首先您需要在oracle中创建新用户。您可以在下面找到用于创建 TEST
用户的 sql 脚本。
CREATE USER TEST IDENTIFIED BY TEST DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP PROFILE DEFAULT ACCOUNT UNLOCK;
GRANT CONNECT, RESOURCE, IMP_FULL_DATABASE, CREATE VIEW, UNLIMITED TABLESPACE, CREATE JOB TO TEST;
2.然后您需要创建一个包含image
列的表来存储您的图像
create table test.image_storage (image blob);
3.创建 JSP 并创建用于上传图像的表单:
<form action="upload" method="post" enctype="multipart/form-data">
<input type="text" name="description" />
<input type="file" name="file" />
<input type="submit" />
</form>
4.注册您的 servlet:
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
@WebServlet("/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {
public static final String QUERY = "INSERT INTO IMAGE_STORAGE (IMAGE) VALUES (?)";
public static final String CONNECTION_URL = "jdbc:oracle:thin:@localhost:1522:orcl";
public static final String USER_NAME = "TEST";
public static final String USER_PWD = "TEST";
public static final String FILE_PARAMETER = "file";
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Part filePart = request.getPart(FILE_PARAMETER);
InputStream fileContent = filePart.getInputStream();
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
System.out.println("Oracle driver is absent?");
e.printStackTrace();
}
Connection connection = null;
try {
connection = DriverManager.getConnection(
CONNECTION_URL, USER_NAME, USER_PWD);
PreparedStatement statement = null;
try {
statement = connection.prepareStatement(QUERY);
statement.setBlob(1, fileContent);
statement.execute();
} catch (SQLException e) {
System.out.println("State cannot be executed!");
e.printStackTrace();
return;
} finally {
statement.close();
}
} catch (SQLException e) {
System.out.println("Connection Failed!");
e.printStackTrace();
return;
} finally {
try {
connection.close();
} catch (SQLException e) {
System.out.println("Connection cannot be closed?");
e.printStackTrace();
}
}
}
}
希望这能帮助您理解这个主题。
关于java - 如何使用 JAVA 将图像从 HTML 保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50783126/