0

我认为这将是一个快速有趣的项目,但它变成了一个问题。:(

我想将一些图像加载到 Oracle 表中,然后通过 servlet 使用休眠模式检索它们。

所以这是插入图像的加载器部分。

  String imageFileName = row[col++];
  String ext = imageFileName.substring(imageFileName.lastIndexOf('.') + 1);
  String imageFilePath = imageDir + imageFileName;
  String mimeType = "image/" + ext;
  image.setImageType(mimeType);

  Image found = imageDAO.retrieve(imageId);
  if(found==null){
    //create a new one
    byte[] bytes = loadImage(imageFilePath, mimeType);
    image.setImageData(bytes);
    image = imageDAO.create(image);
    ++created;
  }
  else{
    //check if an update is needed
    if(updateDate.after(found.getUpdated())){
      byte[] bytes = loadImage(imageFilePath, mimeType);
      found.setImageData(bytes);
      found.setUpdated(updateDate);
      image = imageDAO.update(found);
      ++updated;
    }
  }
}

这是servlet内部:

  @Override
  protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
    String imageId = request.getParameter(KeyNames.PARM_IMAGE_ID);
    if(imageId==null){
      throw new NullPointerException("Image ID parameter is required");
    }

    Image image = getImageDAO().retrieve(imageId);
    if(image==null){
      throw new IllegalArgumentException(imageId + " is not a valid image ID");
    }

    response.setContentType(image.getImageType());
    response.getOutputStream().write(image.getImageData());
    response.getOutputStream().close();

    return null;
  }

对我来说似乎很简单,但是当我使用浏览器点击 URL 时,我得到:

“图片 [url] 无法显示,因为它包含错误”

由于 servlet 包装成功,我必须猜测在加载或检索中,我已经损坏了图像数据。我不知道下一步该怎么做,所以任何建议都值得赞赏。

4

1 回答 1

0

真丢人!这就是我从互联网上运行代码而没有实际研究它以找出它的作用的结果!

所以答案是我通过可写光栅运行图像以便存储在数据库中。嗯,呃!当您栅格化图像时,它不再是 png。

所以我只是从输入文件中复制一个字节并将其存储在 blob 中,它工作正常。

现在就拍我。

谢谢您的帮助!

于 2012-12-04T12:39:34.783 回答