无法使用 SparkJava 将图像上传到 cloudsql 数据库



我们有一个包含 2 个表、用户和图像的数据库。用户表有 3 行:密码、用户名和主键。图像表具有图像 ID、图像和用户标签(等于用户主键)。当我们尝试上传图像时,上传函数不会返回错误,但在显示图像时会出现错误:

[qtp2073702330-26] INFO spark.http.matching.MatcherFilter - 请求的路由

[/jpeg/getImagesTen] 尚未在 Spark for Accept 中映射:

[image/webp,image/apng,image/,/*;q=0.8]

我们知道错误提到了获取图像路由,但我们知道这不是问题,因为当对 cloudsql 中的所有内容(在我们的图像表中)进行简单查询时,没有出现一个条目。所以我们知道上传功能以某种方式存在缺陷,或者 cloudsql 不允许我们的图像。

我们用于上传图片的函数如下所示:

public static String uploadImage(spark.Request request) {
Context context = getSessionContext(request.session());
String username = request.session().attribute("username");
MultipartConfigElement multipartConfigElement = new MultipartConfigElement("/tmp");
request.raw().setAttribute("org.eclipse.jetty.multipartConfig", multipartConfigElement);
int userID = 0;
try {
System.out.println(username);
String getUserID = "SELECT UserID FROM users WHERE Username = '" + username + "';";
PreparedStatement getUserIDStatement = context.db.conn.prepareStatement(getUserID);
ResultSet getUserRS = getUserIDStatement.executeQuery();
while (getUserRS.next()) {
System.out.println(getUserRS.getInt("UserID"));
userID = getUserRS.getInt("UserID");
}
System.out.println(userID);
System.out.println(request.raw().getPart("file"));
Part filePart = request.raw().getPart("file");
InputStream fileContent = filePart.getInputStream();
String sql = "INSERT images(Image, UserTag) VALUES (?,?);";
PreparedStatement ps = db.conn.prepareStatement(sql);
ps.setBinaryStream(1, fileContent);
ps.setInt(2, userID);
ps.execute();
} catch (Exception e) {
System.out.println(e);
}
return "<!DOCTYPE html>"
+ "<html>""
+ "<body background="https://webgradients.com/public/webgradients_png/019%20Malibu%20Beach.png">"
+ "                <form method="get" action="/">n"
+ "                    <button type="submit">Go Back</button>n"
+ "                </form>"
+ "</body>"
+ "</html>";
}

这是邮政路线:

post("/protected/upload", (req, res) -> uploadImage(req));

以下是提交图像的 HTML 表单:

<form method="post" action="/protected/upload" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" />
</form>

我不知道Google Cloud SQL的行为,但从我在你的代码中看到的:

INSERT images(Image, UserTag) VALUES (?,?);

应该读

INSERT INTO images(Image, UserTag) VALUES (?,?);

并且您要确保:

  • Google Cloud SQL 已启用自动提交
  • 关闭所有与 JDBC 相关的对象以避免资源泄漏(PreparedStatementResultSet)。

相关内容

  • 没有找到相关文章

最新更新