java—如何在web应用程序中使用hdfs存储上传的图像并在jsp上显示它们

xnifntxz  于 2021-06-03  发布在  Hadoop
关注(0)|答案(0)|浏览(208)

我有一个jspweb应用程序,我想将用户上传的图像存储在hdfs中,然后在jsp前端页面的图像标签上显示该图像。我在互联网上到处找过,但奇怪的是,没有一个例子能说明这个特殊的任务。大多数代码片段要么显示字数Mapreduce功能,要么显示如何从fs写入和打开文件,但不显示如何在网页上显示文件。
这是我申请的基本流程。
用户从web html表单上载文件

<form action="profile" method="post" enctype="multipart/form-data">
   <input type="file" name="photo" value=""/>    
   <input type="submit" value="Upload"/>
</form>

servlet接收请求并使用apachefileupload 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
                ...

             }
      }
}

将上载的映像从本地文件系统复制到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();

最后一个问题是,通常要将上传的图像显示到jsp页面,只需使用像这样的图像标记

<img src="images/bee.jpg"/>

在hadoop中如何显示此图像?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题