• java下载网络文件


    wap开发中,每一个src或者href的数据都可能来自本地,网络,或者socket
    java中可以直接读取网络流,.net下好像读取网络流会有点问题(不支持查询),好像需要现保存后读取

    public void RequestFile(HttpServletRequest request, HttpServletResponse response) {    
            
            String serverurl = "";
            if (request.getParameter("serverurl") != null)
                serverurl = request.getParameter("serverurl");
                   
            if(serverurl.startsWith("file:"))
                serverurl = serverurl.substring(5);

            // 需要考虑多种情况,本地下载,网络下载,SOCKET下载等等
            // url = HttpHelper.decode(url);
            InputStream inStream = null;
            if (url.toLowerCase().startsWith("http://")) {
                // 网络文件           
                HttpClient httpClient = new HttpClient();
                GetMethod getHC = new GetMethod(url);           
                try {
                    int statusCode = httpClient.executeMethod(getHC);
                    if (statusCode == HttpStatus.SC_OK) {
                        inStream = getHC.getResponseBodyAsStream();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
               
                View(inStream, url, response);
               
            }
            else if (!serverurl.startsWith("?")){
                // 本地文件
                serverurl = WapRoot + request.getSession().getAttribute("appfolder") + File.separatorChar + serverurl;
                try {
                    inStream = new FileInputStream(serverurl);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                View(inStream, serverurl, response);
            }
            else {
                // socket文件
                //需要判断socket头是是下载,还是预览?
                //重构socket地址和post数据
                String postData = "";
                //注意postData格式!!!eg : serveraction=previewfile@mobiledisk&url=%2F%2F0651017481693288.jpg
               
                if(serverurl.startsWith("http://"))
                {
                    //表示网络文件,和流不一样的命令
                    postData = "serveraction=viewfileremote&url="+serverurl;
                }
                else
                {
                    postData = GetServerUrl(request);               
                }
                //请求url
                String url = request.getSession().getAttribute("defaulturl").toString();           
                //Write(postData);                       
                try {
                    URL httpUrl = new URL(url);
                    URLConnection conn = httpUrl.openConnection();
                    conn.setDoOutput(true);
                    conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
                    //如果cookie存在,则发送过去
                    if(request.getSession().getAttribute("cookie") != null)
                    {
                        conn.setRequestProperty("Cookie", request.getSession().getAttribute("cookie").toString());
                    }
                    // post数据到服务器
                    OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream());
                    osw.write(postData);
                    osw.flush();
                    osw.close();
                    //读取socket中转服务返回的数据
                    inStream = conn.getInputStream();
                           
                   
                    String contentType = conn.getContentType();
                    String filename = conn.getHeaderField("Content-Disposition");
                    if(filename != null && filename.indexOf("filename=") > -1)
                        filename = filename.substring(filename.indexOf("filename=") + 9);
                   
                    if(contentType != null && contentType.indexOf("application/octet-stream") > -1)
                        Download(inStream, url, filename, response);
                    else
                        View(inStream, url, contentType, response);   
                   
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
       
        /**
         * @author yesun
         * 功能:预览文件
         * @param inStream
         * @param url
         * @param response
         */
        public void View(InputStream inStream, String url, HttpServletResponse response)
        {
            View(inStream, url, null, response);
        }
           
        /**
         * @author yesun
         * 功能:预览文件
         * @param inStream
         */
        public void View(InputStream inStream, String url, String contentType, HttpServletResponse response)
        {
            String filename = "";
            if(url.lastIndexOf(File.separatorChar + "") > -1)
                filename = url.substring(url.lastIndexOf(File.separatorChar + ""));
            else
                filename = url;
           
            if (inStream != null) {
                byte[] b = new byte[1024];
                int len = 0;
                try {
                    // 读到流中
                    // 设置输出的格式
                    response.reset();
                    response.setCharacterEncoding("utf-8");
                    //response.setHeader("Content-Disposition", "attachment;filename=" + HttpHelper.encode(filename, "utf-8"));
                    // 开始解析
                    if(contentType == null || contentType.equals(""))
                    {
                        String extendName = url.toLowerCase().substring(url.lastIndexOf(".") + 1);
                        if (extendName.equals("doc")) {
                            response.setContentType("application/msword;charset=utf-8");
                        } else if (extendName.equals("ppt")) {
                            response.setContentType("application/vnd.ms-powerpoint;charset=utf-8");
                        } else if (extendName.equals("xls")) {
                            response.setContentType("application/vnd.ms-excel;charset=utf-8");
                        } else if (extendName.equals("jpg")) {
                            response.setContentType("image/jpeg;charset=utf-8");
                        } else if (extendName.equals("gif")) {
                            response.setContentType("image/gif;charset=utf-8");
                        } else if (extendName.equals("png")) {
                            response.setContentType("image/png");
                        } else if (extendName.equals("bmp")) {
                            response.setContentType("image/bmp;charset=utf-8");
                        } else if (extendName.equals("htm")    || extendName.equals("html") || extendName.equals("shtml") || extendName.equals("xhtml")) {
                            response.setContentType("text/html;charset=utf-8");
                        } else if (extendName.equals("txt")) {
                            response.setContentType("text/plain;charset=utf-8");
                        } else {
                            response.setContentType("application/octet-stream;charset=utf-8");
                        }
                    }
                    else
                    {
                        response.setContentType(contentType);
                    }
                   
                    response.setHeader("Content-Disposition", "attachment;filename=" + HttpHelper.encode(filename, "utf-8"));
                    // 循环取出流中的数据
                    while ((len = inStream.read(b)) > 0) {
                        response.getOutputStream().write(b, 0, len);
                        response.flushBuffer();
                    }
                    response.getOutputStream().close();
                    inStream.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }   
       
        /**
         * @author yesun
         * 功能:下载览文件
         * @param inStream
         */
        public void Download(InputStream inStream, String url, HttpServletResponse response)
        {
            Download(inStream, url, null, response);
        }
       
        /**
         * @author yesun
         * 功能:下载览文件
         * @param inStream
         */
        public void Download(InputStream inStream, String url, String filename, HttpServletResponse response)
        {
            if(filename == null || filename.equals(""))
            {
                if(url.lastIndexOf(File.separatorChar + "") > -1)
                    filename = url.substring(url.lastIndexOf(File.separatorChar + ""));
                else
                    filename = url;   
            }   
           
            byte[] b = new byte[10*1024];
            int len = 0;
            try {
                // 设置输出的格式
                response.reset();
                response.setCharacterEncoding("utf-8");
                // 开始解析
                response.setContentType("application/octet-stream;charset=utf-8");
                response.setHeader("Content-Disposition", "attachment;filename=" + HttpHelper.encode(filename, "utf-8"));           
                // 循环取出流中的数据
                while ((len = inStream.read(b)) > 0) {
                    response.getOutputStream().write(b, 0, len);
                    response.flushBuffer();
                }
                response.getOutputStream().close();
                inStream.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        


  • 相关阅读:
    DP大作战—状态压缩dp
    DP大作战—组合背包
    DP大作战——多重背包
    单链表的使用——计算多项式加法
    单链表逆置
    钢条切割问题
    哈夫曼树及解码
    双“11”的抉择
    矩阵链相乘助教版代码
    abs()函数的返回值问题
  • 原文地址:https://www.cnblogs.com/yesun/p/674543.html
Copyright © 2020-2023  润新知