我了解如何获取URL文本页面并循环结果
URL url = new URL(this.url);
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
while ((line = reader.readLine()) != null) {
....
如何获取图像并将其存储为Blob?
答案 0 :(得分:3)
直接以InputStream
为准,然后使用PreparedStatement#setBinaryStream()
进行存储。它是二进制数据,而不是字符数据,因此Reader
只会弄乱事物,你不想拥有它。
简而言之:
InputStream input = imageUrl.openStream();
// ...
statement = connection.prepareStatement("INSERT INTO image (content) VALUES (?)");
statement.setBinaryStream(1, input);
statement.executeUpdate();
PreparedStatement
非常有用。它不仅可以使您免于SQL injections,而且还可以在SQL语句中轻松设置像InputStream
这样的高价Java对象。您可以在JDBC tutorial了解PreparedStatement
的更多信息。
答案 1 :(得分:3)
我所做的存储二进制数据(如图像)的方法非常简单。在我的情况下,我处理上传的文件,这些文件被发布到servlet。在servlet中,我使用request.getInputStream()在发布的主体上获取InputStream。但是,这适用于任何类型的InputStreawm,包括基于URL的一个。下面的示例代码显示了如何将该InputStream转换为google appeninge Blob,然后您可以在数据存储中保持持久性。
...
import org.apache.commons.io.IOUtils;
import com.google.appengine.api.datastore.Blob;
...
public void InputStreamToBlob(InputStream i) throws IOException {
...
Blob content = new Blob(IOUtils.toByteArray(i));
...
答案 2 :(得分:0)
对于图像,不是逐行读取缓冲区,而是将其加载到字节数组中,并将此字节数组保存为blob。