首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OAF -从服务器下载文件

OAF -从服务器下载文件
EN

Stack Overflow用户
提问于 2016-06-10 09:15:36
回答 1查看 3K关注 0票数 0

我有一个要求,允许用户输入服务器路径和文件名并下载文件。

我使用了下面的代码来达到这个目的:

代码语言:javascript
复制
HttpServletResponse response = (HttpServletResponse) pageContext.getRenderingContext().getServletResponse();

File fileToDownload = null;
try
{
  fileToDownload = new File(filePath);
}
catch (Exception e)
{
  throw new OAException("Invalid File Path or file does not exist.");
}

response.setContentType(fileType);
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
response.setContentLength((int)fileToDownload.length());

InputStream in = null;
ServletOutputStream outs = null;

try
{
  outs = response.getOutputStream();
  in = new BufferedInputStream(new FileInputStream(fileToDownload));
  int ch;
  while ((ch = in.read()) != -1)
  {
    outs.write(ch);
  }
}catch (IOException e)
{
  // TODO
  e.printStackTrace();
}finally
  {
    try
    {
      outs.flush();
      outs.close();
      if (in != null)
      {
        in.close();
      }
    }catch (Exception e)
    {
      e.printStackTrace();
    }
  }

问题是,任何大于48 it的文件在下载时都会追加一行。

开发人员指南中提到的使用messageDownload项的方法不够清楚。它提到了一个VO。这个VO的问题应该是什么?如何在此表中插入用于此VO的文件?

请提出解决办法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-16 05:53:14

我终于解决了我的疑问。

我用过messageDownload Bean来达到这个目的。

  1. 如果文件没有存储在DB中的任何地方,那么创建一个新的LOB表。否则,可以使用现有的LOB表,并且只需要第三步。创建LOB表:

创建表xx_LOBS ( FILE_ID编号>主键,FILE_CONTENT_TYPE VARCHAR2(100) NULL,> FILE_DATA CLOB ) LOB (FILE_DATA)存储AS >( TABLESPACE APPS_TS_MEDIA >启用存储行>块32768 > PCTVERSION 10 > NOCACHE >存储(>初始128 K>下128 K>)MINEXTENTS 1> MAXEXTENTS 2147483645 > PCTINCREASE 0> BUFFER_POOL DEFAULT >);

  1. 现在,为了将文件插入到这个LOB表中,我使用了我在OAF页面本身中调用的过程。请注意,BFILENAME函数中使用的目录必须是all_directories或dba_directories中的现有目录。

创建或替换过程xx_to_clob_proc (p_dir IN VARCHAR2,p_file_name IN VARCHAR2,ret_code OUT VARCHAR2,ret_msg OUT VARCHAR2)为v_bfile BFILE;v_clob v_bfile := BFILENAME (p_dir,p_file_name);DBMS_LOB.FILEEXISTS (v_bfile) =1,DBMS_LOB.OPEN(v_bfile);DBMS_LOB.CREATETEMPORARY (v_clob,TRUE,DBMS_LOB.SESSION);DBMS_LOB.LOADFROMFILE (v_clob,v_bfile,DBMS_LOB.GETLENGTH (v_bfile));DBMS_LOB.CLOSE (v_bfile);插入xx_LOBS值(FILE_ID_SEQ.NEXTVAL,'text/html',v_clob);结束IF;ret_code := 'S';ret_msg :=‘存储在LOB表中的文件’;提交;当其他文件被保存在ret_code :=‘E’时异常;ret_msg :=错误:文件未生成。回滚;结束;当其他人随后使用ret_code := 'E';ret_msg :=‘错误时出现异常:’:=sqlerrm;插入到xx_LOBS值中(FILE_ID_SEQ.NEXTVAL,'ERROR',EMPTY_CLOB();提交;END;

  1. 现在,在OAF页面中,添加messageDownload项并指定以下内容: 视图实例: VO与LOB表的查询 视图属性:具有文件名的VO属性 MIME类型:要么硬编码它为'text/html‘,要么使它像在DevGuide中那样是动态的 文件视图Attr:具有文件数据的VO属性 数据类型: CLOB

我为文件路径和文件名添加了一个输入字段。然后,在单击GO按钮时,调用步骤2过程,并相应地执行messageDownload项VO。

如果有任何疑问,请告诉我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37744420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档