【发布时间】:2016-08-09 14:06:22
【问题描述】:
我想要做什么:
在服务器端生成一个txt文件,在客户端下载。 我正在使用 struts 2,这里是代码部分:
AwesomeAction.java
InputStream fileInputStream;
public InputStream getFileInputStream(){
return fileInputStream;
}
public String execute() {
res = "toto";
fileInputStream = new StringInputStream(res);
return SUCCESS;
}
struts.xml
<action name="awesomeAction" class="pathtomyawesomeaction">
<result name="success" type="stream">
<param name="contentType">text/plain</param>
<param name="inputName">fileInputStream</param>
<param name="contentDisposition">attachment;filename="id_opp.txt"</param>
<param name="bufferSize">1024</param>
</result>
<result name="error" type="redirect">/erreur.do</result>
</action>
什么不起作用:
当我点击触发动作的链接时,实际上下载了一个名为“id_opp.txt”的文件,它包含所有文本(“toto”),但它在每个字符前添加了一个空格。
“到了”
通过服务器调试,我确定我的变量包含“toto”服务器端,所以它一定是我想念的配置...
有什么想法吗?
使用导入 org.hsqldb.lib.StringInputStream;对于 InputStream,由于 String 是在该类中构建的,所以我不能使用 FileInputStream 或任何东西,我不知道还有其他方法可以做到吗?
检查编码,一有结果就会更新
感谢 Thomas 解决:
使用 StringInputStream 是问题的根源,而是将其切换为: fileInputStream = new ByteArrayInputStream(res.getBytes(StandardCharsets.UTF_8));
为“res”变量构建一个输入流,使用实际编码等...
【问题讨论】:
-
这可能是编码问题,因为您没有提供任何内容。除此之外,您使用的是什么
StringInputStream课程? AFAIK 它不是 struts 2 核心库,也不是 JDK 类。你的例子正确吗?您以小写形式传递t,但以大写形式传递它? -
我将使用这些详细信息编辑问题,以便任何人也可以看到它们!
-
@Thomas 大写的 T 是一个错字,我的错。尝试使用 ByteArrayInputStream 来解决这个问题,这似乎是构建我的 InputStream 的更好方法,我会在几分钟内通知您
-
@Thomas 感谢您的评论已修复!这样做的好方法是“fileInputStream = new ByteArrayInputStream(res.getBytes(StandardCharsets.UTF_8));” ,所以这是编码和 StringInputStream 的使用的混合,这显然是原因!如果您可以将其添加为官方答案,我会给您赏金!非常感谢
标签: java text download inputstream