Servelt使用contextPath和servletContext上传任何文件上传成功下载都无法下载

时间:2017-02-25 11:35:24

标签: javascript java servlets

我使用以下方式完成文件上传:

                 ServletContext servletContext = getServletContext();
         String contextPath = servletContext.getRealPath(File.separator);

         String path = contextPath + "\\uploads\\" + session.getAttribute("seusername");
         System.out.println(path);

         File file=new File(path);
         if(!file.exists())
             file.mkdirs();
         Part filePart = request.getPart("uploadfile");
         //return content type of the file
         String type = filePart.getHeader("content-type");

         //checking content type of file. 
         if (!type.equals("application/x-msdownload")) {

             final String fileName = getFileName(filePart);
             myfilename=fileName;
            try {
                 EncriptFilename= aESCryp.encrypt(fileName);
                System.out.println(EncriptFilename);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


             OutputStream fout = null;
             InputStream filecontent = null;

             try {
                 fout = new FileOutputStream(new File(path + File.separator + fileName));
                 filecontent = filePart.getInputStream();
                 int read = 0;
                 final byte[] bytes = new byte[32 * 1024];

                 while ((read = filecontent.read(bytes)) != -1) {
                     fout.write(bytes, 0, read);
                 }

                 fout.flush();
                 fout.close();
             } catch (Exception er) {
                 System.out.println("error:"+er.getMessage());
             }
         }

我上传的图片,pdf,doc文件,,,很好.. 在我的本地光盘文件夹上的文件位置之后。 D:\ JavaWorkspace.metadata.plugins \ org.eclipse.wst.server.core \ tmp1 \ wtpwebapps \ File \ uploads \ user \ java_coffee_cup_logo1600.png

我的问题是...如何下载此文件,,, 我无法使用href链接下载..

1 个答案:

答案 0 :(得分:0)

您的网络应用可以支持文件下载,基本上与您帖子中的Servlet相反。

创建"下载" Servlet,并配置映射到Servlet中的web.xml(或使用注释来定义映射)。此servlet的URL可能如下所示: http://machine.com/my-app/download/my-file.jpg

在下载Servlet中,查看请求网址以发现请求的文件名(my-file.jpg),然后使用FileInputStream打开并阅读my-file.jpgrequest.getPathInfo()可能会为您提供确定用户想要下载的文件所需的信息。请参阅javadoc for HttpServletRequest.getPathInfo().

请注意,my-file.jpg可以存在于您想要的任何位置。您的Servlet可以将请求URL中的文件名和路径映射到本地文件系统上的任意位置。该文件甚至可以存在于另一个Web服务器上。您只需要能够创建一个访问该文件的InputStream

使用此路径信息,创建FileInputStream以访问该文件。然后将FileInputStream复制到ServletResponse的输出流。此SO post和此SO post举例说明如何将InputStream复制到OutputStream

您可以像这样获得响应的输出流:response.getOutputStream()。完成后不要忘记关闭InputStreamOutputStream