我现在在action里有一个InputStream,我想实现的功能是用户在界面上点击下载按钮,弹出windows的保存框,选择文件名和路径,把Stream文件保存在指定位置上,求高手指点一下怎么做

解决方案 »

  1.   

    下载是OutputStream
    到底是啥?乱啦
      

  2.   

    哦,我在说清楚一点,下载当然是在OutputStream里,我说的是将InputStream里的数据考到OutputStream里
      

  3.   

    我再把问题说的清楚一些哈,我在action中得到的一个流文件,不是读取服务器中的文件,而是经过处理直接得到了流文件。我想把这个文件保存到浏览器这端,我在网上找到了servelet下载的代码
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    {
    // 设置request对象的字符编码
    request.setCharacterEncoding(ENCODING);
     //response.setContentType("application/x-msdownload");
    // 根据文件的类型设置response对象的ContentType
    String contentType = "application/octet-stream";
    response.setContentType(contentType);
    // 设置response的头信息
    response.setHeader("Content-disposition", "attachment;filename=\""
    + new String(file_business_attach.getFile_name().getBytes("GBK"),"ISO8859_1") + "\"");
    InputStream is = ios;//流已经得到了
    OutputStream os = null;
    try
    {
    os = new BufferedOutputStream(response.getOutputStream());
    // 定义buffer
    byte[] buffer = new byte[4 * 1024]; // 4k Buffer
    int read = 0;
    // 从文件中读入数据并写到输出字节流中
    while ((read = is.read(buffer)) != -1)
    {
    os.write(buffer, 0, read);
    }
    os.flush();
    }
    catch (Exception e)
    {
    e.printStackTrace();
    }
    finally
    {
      os.close()
    }
    ,我新建了一个servelet,在action里调用它
    结果类执行完了,然后报错getOutputStream() has already been called for this response
    想问问高手怎么处理,或者有什么别的下载方式可以实现这个功能
      

  4.   

    你说的好像是文件上传.....
    FormFile  file = form.getFile();
    InputStream stream = file.getInputStream();
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    OutputStream bos = new FileOutputStream(filePath +file.getFileName());int bytesRead = 0;
    byte[] buffer = new byte[5120]; 
    while ( (bytesRead = stream.read(buffer, 0, 5120)) != -1) {
        bos.write(buffer, 0, bytesRead
    }
    bos.close();
    stream.close();