我需要从数据库中检索图像。为此,我使用了jquery和servlet来检索存储在表中的所有图像。但是,当我运行代码产生的代码时,HTTP Status 500 - class oracle.jdbc.driver.OracleBlobInputStream declares multiple JSON fields named maxPosition
我是Jquery中的新手,我不知道如何为图像使用JSON。
我的Servlet是:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String uname;// = request.getParameter("countryCode");
uname="shyam";
PrintWriter out = response.getWriter();
response.setContentType("text/html");
response.setHeader("Cache-control", "no-cache, no-store");
response.setHeader("Pragma", "no-cache");
response.setHeader("Expires", "-1");
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST");
response.setHeader("Access-Control-Allow-Headers", "Content-Type");
response.setHeader("Access-Control-Max-Age", "86400");
Gson gson = new Gson();
JsonObject myObj = new JsonObject();
ArrayList<ImageFileInfo> imageInfo = getInfo(uname);
ImageFileInfo info = new ImageFileInfo();
JsonElement imageObj = gson.toJsonTree(imageInfo);
boolean nonNullElemExist= false;
for (ImageFileInfo s: imageInfo) {
if (s != null) {
nonNullElemExist = true;
break;
}
}
if(nonNullElemExist==true){
myObj.addProperty("success", false);
}
else {
myObj.addProperty("success", true);
}
myObj.add("imageInfo", imageObj);
out.println(myObj.toString());
out.close();
}
private ArrayList<ImageFileInfo> getInfo(String uname) {
ArrayList<ImageFileInfo> imageFileList = new ArrayList<ImageFileInfo>();
Connection conn = null;
PreparedStatement stmt = null;
try {
conn=prepareConnection();
StringBuilder sb=new StringBuilder(1024);
sb.append("select * from ").append(uname.trim()).append("image");
String sql=sb.toString();
stmt = conn.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
while(rs.next()){
ImageFileInfo info = new ImageFileInfo();
info.setName(rs.getString("imagename").trim());
info.setDisc(rs.getString("imagedisc").trim());
info.setImageid(rs.getInt("imageid"));
info.setalbumid(rs.getInt("albumid"));
byte imageData[] = rs.getBytes("imagethumb");
String encoded = DatatypeConverter.printBase64Binary(imageData);
info.setThumb(encoded);
byte image1Data[] = rs.getBytes("imagethumb");
String encoded1 = DatatypeConverter.printBase64Binary(image1Data);
info.setFull(encoded1);
}
rs.close();
stmt.close();
stmt = null;
conn.close();
conn = null;
}
catch(Exception e){ System.out.println( "Error --> " + displayErrorForWeb(e));;}
finally {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException sqlex) {
// ignore -- as we can't do anything about it here
}
stmt = null;
}
if (conn != null) {
try {
conn.close();
} catch (SQLException sqlex) {
// ignore -- as we can't do anything about it here
}
conn = null;
}
}
return imageFileList;
}
而且ImageFileInfo.java文件是:
package skypark;
import java.io.InputStream;
public class ImageFileInfo
{
String name = null;
String disc = null;
int imageid=0;
int albumid=0;
InputStream thumbarray;
InputStream fullarray;
public void setName(String name)
{
this.name = name;
}
public String getName() {
return name;
}
public void setDisc(String disc)
{
this.disc = disc;
}
public void setImageid(int Imageid)
{
this.imageid = Imageid;
}
public void setalbumid(int albumid)
{
this.albumid = albumid;
}
public void setThumb(InputStream inputStream)
{
this.thumbarray = inputStream;
}
public void setFull(InputStream binaryStream) {
this.fullarray = binaryStream;
}
}
堆栈跟踪为:
java.lang.IllegalArgumentException: class oracle.jdbc.driver.OracleBlobInputStream declares multiple JSON fields named maxPosition
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:122)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
com.google.gson.Gson.getAdapter(Gson.java:353)
com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:55)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195)
com.google.gson.Gson.toJson(Gson.java:586)
com.google.gson.Gson.toJsonTree(Gson.java:479)
com.google.gson.Gson.toJsonTree(Gson.java:458)
skypark.RetriveIm.doGet(RetriveIm.java:66)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
我不知道该错误说明了什么。请任何人帮我解决这个问题......谢谢.....
您InputStream
在类中包括了两个变量,这些变量被设置为的实例OracleBlobInputStream
,您的GSON提供程序无法实例化这些实例。您可能希望将图像内容存储为字节(或作为(URL编码的)字符串)。
public class ImageFileInfo implements Serializable {
// Other class variables
private byte[] thumbarray;
private byte[] fullarray;
// Constructors, Getters/Setters
}
ImageFile.setThumb(rs.getBytes("imagethumb"));
ImageFile.setFull(rs.getBytes("imagefull"));
在侧面切线上,您似乎正在尝试返回JSON内容,但是您错误地将Content-Type
as
text/html
而不是指定为application/json
。
问题内容: 我最近问了另一个(相关的)问题,这导致了后续问题: 通读jQuery.ajax()文档(http://api.jquery.com/jQuery.ajax/),似乎可接受的dataTypes列表不包含图像。 我正在尝试使用jQuery.get(如果需要的话,也可以使用jQuery.ajax)来检索图像,将此图像存储在Blob中,然后在POST请求中将其上传到另一台服务器。当前,由于数据
问题内容: 我是Java编程的新手,我正在搜索Java代码以将图像存储在PostgreSQL中并检索图像。 在PostgreSQL中,我使用了Bytea数据类型。图像已存储。但是当我检索时,我得到NULL。我无法获得图像。 对此的任何示例或对此的任何其他建议将是有帮助的。 问题答案: PostgreSQL jdbc文档的第7章介绍了如何存储二进制数据并使用图像(* .gif文件)作为示例。您可能想
问题内容: 我正在重构一些旧代码,包括重写基本的mysql查询以使用PDO。 以下内容在所有浏览器和所有图像类型中均能出色发挥作用: 不幸的是,但是我使用PDO重写了它,但是它不起作用。我已经遍历了整个PDO文档和标准的Web搜索,但是所有建议/解决方案都无效。 如何使用PDO轻松地从MySQL中获取图像并显示图像? 编辑1: 马修·拉兹洛夫(Matthew Ratzloff)在下面给出了明显的答
编辑:我想知道我是否添加了错误的bot?bot与用户的OAuth 2位于同一应用程序上。此bot添加了以下内容:https://discordapp.com/oauth2/authorize?client_id={我的id} 我与Discord有OAuth2连接,使用https://github.com/wohali/oauth2-discord-new这将返回discord用户和我的访问令牌。它
问题内容: 我有一个输出html简单行的表格 我可以通过将数据附加到网址(例如http://site.com/form.asp?sample=100)直接访问该过程 因为这是跨域(到子域)的,所以我尝试使用JSONP做到这一点。我首先使用数据类型json进行了尝试,但仍被禁止使用403。这是我正在使用JSONP进行的尝试,但这是种种混乱,并会在错误后面附加此%5Bobject%20Object%5
本文向大家介绍解决jQuery使用JSONP时产生的错误,包括了解决jQuery使用JSONP时产生的错误的使用技巧和注意事项,需要的朋友参考一下 什么是域,简单来说就是协议+域名或地址+端口,3者只要有任何一个不同就表示不在同一个域。跨域,就是在一个域中访问另一个域的数据。 如果只是加载另一个域的内容,而不需要访问其中的数据的话,跨域是很简单的,比如使用iframe。但如果需要从另一个域加载并使