我们有一个包含2个表,用户和图像的数据库。 users表有3行:password,username和primary key。 images表具有图像id,图像和用户标签(等于用户主键)。当我们尝试上传图片时,上传功能不会返回错误,但在显示图片时会出现错误:
[qtp2073702330-26] INFO spark.http.matching.MatcherFilter - 请求的路线
[/ jpeg / getImagesTen]尚未映射到Spark for Accept:
[图像/ WEBP,图像/ APNG,图像/ , / *; Q = 0.8]
我们知道错误提到了get Images路由,但是我们知道它不是问题,因为在对cloudql中的所有内容进行简单查询时(在我们的图像表中),不会出现单个条目。所以我们知道上传功能有点瑕疵,或者cloudql不允许我们的图像。
我们用来上传图片的功能如下:
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>
答案 0 :(得分:0)
我不知道Google Cloud SQL的行为,但是从我在您的代码中看到的内容:
INSERT images(Image, UserTag) VALUES (?,?);
应该阅读
INSERT INTO images(Image, UserTag) VALUES (?,?);
你想确保:
PreparedStatement
,ResultSet
)。