【发布时间】:2015-07-29 01:00:17
【问题描述】:
我正在关注this 教程,其中解释了如何通过将图像声明为Blob 对象来将图像存储到数据存储中。没关系,问题是在示例中图像是这样获取的:
public class StoreMovieServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
URLFetchService fetchService = URLFetchServiceFactory.getURLFetchService();
// Fetch the image at the location given by the url query string parameter
HTTPResponse fetchResponse = fetchService.fetch(new URL(req.getParameter("url")));
String fetchResponseContentType = null;
for (HTTPHeader header : fetchResponse.getHeaders()) {
// For each request header, check whether the name equals
// "Content-Type"; if so, store the value of this header
// in a member variable
if (header.getName().equalsIgnoreCase("content-type")) {
fetchResponseContentType = header.getValue();
break;
}
}
if (fetchResponseContentType != null) {
// Create a new Movie instance
Movie movie = new Movie();
movie.setTitle(req.getParameter("title"));
movie.setImageType(fetchResponseContentType);
// Set the movie's promotional image by passing in the bytes pulled
// from the image fetched via the URL Fetch service
movie.setImage(fetchResponse.getContent());
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
// Store the image in App Engine's datastore
pm.makePersistent(movie);
} finally {
pm.close();
}
}
}
}
我没有从哪里获取图像的url。
相反,我想将它们存储在我的 Servlet 中的某个位置,然后从那里将它们存储到数据存储中。
因此,如何获取一些本地存储在我的 Servlet 中的图像,而不是从外部 url 获取它们?
换句话说,我应该将要投放的图片放在哪里?
更新
正如@Nick 所建议的,我意识到有问题的教程并不是满足我需求的好方法。因此,我在
Servlet的doPost方法中重新更改了它并这样做了:
InputStream s = this.getClass().getClassLoader().getResourceAsStream("http://cardimgs.org/imgs/cardbackground1.jpg");
Movie movie = new Movie();
try {
byte[] bytes = IOUtils.toByteArray(s);
movie.setImage(bytes);
}catch (IOException e){
e.printStackTrace();
}
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
// Store the image in App Engine's datastore
pm.makePersistent(movie);
} finally {
pm.close();
}
Movie 类:
link,
还有我的appengine-web.xml:
link 1
我尝试在其中定义我的静态文件。但是,问题在于,InputStream 上方的代码似乎是null 并返回NullPointerException。
以下是我在 Servlet 中存储图像的方式:
如何成功访问我的静态文件?
更新 2
我可以通过更改来加载图像:
InputStream s = this.getClass().getClassLoader().getResourceAsStream("http://cardimgs.org/imgs/cardbackground1.jpg");
到这里:
InputStream s = getServletContext().getResourceAsStream("/WEB-INF/imgs/cardbackground1.jpg");
无需在appengine-web.xml文件中添加属性为<include>的文件夹的路径。
【问题讨论】:
-
没有存储在 servlet 中的东西。在 appengine 中没有意义,因为实例可以更改
-
那么我应该在哪里放置我想要投放的图片?
-
datastore 或更合适的 gce
-
当然可以,但是为了将图像存储在数据存储中,您需要从某个地方获取它们。问题是:从哪里来?
-
您的意思是它们是您的应用引擎资源的一部分?如果是这样,他们有一个网址。当然,如果您已经将它们作为资源,我认为将它们存储在其他地方是没有意义的。这就是为什么我不明白 Q
标签: image google-app-engine http url servlets