如何在Web应用程序中使用HDFS来存储上载的图像并将其显示在JSP上

时间:2013-11-12 17:22:35

标签: java jsp hadoop hdfs

我有一个JSP Web应用程序,我想将用户上传的图像存储在HDFS中,然后在JSP前端页面上的图像标记上显示图像。我已经浏览了整个互联网,但奇怪的是这个特定任务没有一个例子。大多数代码片段要么显示字数统计Map-Reduce功能,如何从FS写入和打开文件,而不是如何在网页上显示它。

这是我申请的基本流程。

  1. 用户从网页html表单上传文件

    <form action="profile" method="post" enctype="multipart/form-data">
       <input type="file" name="photo" value=""/>    
       <input type="submit" value="Upload"/>
    </form>
    
  2. Servlet接收请求并使用apache FileUpload 1.2.2库将文件写入本地文件系统。这提出了一个问题,如何将输入流直接写入HDFS而不首先保存到本地FS?

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
           String userPath = request.getServletPath();
           if (userPath.equals("/profile")) {
    
               if (ServletFileUpload.isMultipartContent(request)) {
    //            create a new file upload handler
               ServletFileUpload upload = new ServletFileUpload();
    //            parse the request
               FileItemIterator iterator = upload.getItemIterator(request);
               InputStream stream = null;
    
              while (iterator.hasNext()) {
                   FileItemStream item = iterator.next();
                   stream = item.openStream();
                   if (!item.isFormField()) {
                    File file = new File(request.getServletContext().getRealPath("/") + "images/" + item.getName());
    
                    FileOutputStream fos = new FileOutputStream(file);
                    Streams.copy(stream, fos, true);
    
      //            copy from local FS to HDFS
                    ...
    
                 }
          }
    }
    
  3. 将上传的图像从本地文件系统复制到HDFS

    Configuration config = new Configuration();
    config.addResource(new Path("/usr/local/hadoop/etc/hadoop/core-site.xml"));
    config.addResource(new Path("/usr/local/hadoop/etc/hadoop/hdfs-site.xml"));
    FileSystem fs = FileSystem.get(config); 
    
    //       For illustration purpose lets call the uploaded file bee.jpg  
    
    fs.copyFromLocalFile(new Path("file:///home/qualebs/NetBeansProjects/qualebs/build/web/images/bee.jpg"), new Path("bee.jpg"));
    out.close();  
    
  4. 最后问题 通常,为了将上传的图像显示到JSP页面,可以使用像

    这样的图像标记
    <img src="images/bee.jpg"/>
    

    如何在Hadoop中显示此图像?

0 个答案:

没有答案