文件上传非文本文件格式错误,高手指教!

tcww88 2003-10-19 01:37:08
文件上传采用ServletInputStream的request.getInputStream()从表单中得到输入流,读取文件头信息后,对文件的正文采用字节输出,
代码如下:
public void doUpLoad(HttpServletRequest request) throws IOException
{
ServletInputStream in = request.getInputStream();
byte[] byteline=new byte[128];
int i=in.readLine(byteline,0,128);\\读边界(第一行)
if(i<3)return;
int boundarylength=i-2;\\得到边界长
String boundary=new String(byteline,0,i-2);\\边界字符串



i=in.readLine(byteline,0,128);\\读第二行,得到文件信息
String line=new String(byteline,0,i);
setfilename(line.substring(0,line.length()-2));
if(filename==null)return;
i=in.readLine(byteline,0,128);\\读第三行,得到文件类型
setcontenttype(new String(byteline,0,i-2));
in.readLine(byteline,0,128);\\读空行

FileOutputStream pw=new FileOutputStream((savepath==null? "" : savepath) + "aa.out");
while(true)
{

i=in.readLine(byteline,0,128);\\读正文

line=new String(byteline,0,i);
if(line.startsWith(boundary)&&line.length()==boundarylength+4)\\若是结尾边界,结束
break;
for(int a=0;a<byteline.length;a++)
pw.write(byteline[a]);\\字节输出


}
pw.close();
}

通过jsp调用读取文本格式的文件正确,但非文本格式的文件如:ppt,doc格式则不正确,估计这些文档中有特殊的字符,造成无法正确读取,
请各位高手指教!
...全文
93 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
9731boy 2003-10-28
  • 打赏
  • 举报
回复
二进制和文本有区别吧
hajavaor 2003-10-28
  • 打赏
  • 举报
回复
是你解析流的时候,没有将真正文件内容部分的流取出来。
你用ultraedit32比较一下两个文件内容是否一致就知道答案了。
tcww88 2003-10-20
  • 打赏
  • 举报
回复
我并不是要直接输出显示阿,我觉得如果输出字符流正确的话,改变文件的后缀名为doc或ppt应该是可行的吧,书上的例子是上传zip文件,我想应该是同一个道理吧。
请各位指教!!
swinging 2003-10-19
  • 打赏
  • 举报
回复
FT Y,如果DOC、PPT可以直接拿字符流输出显示的话,
那这些文件岂不是可以用文本编辑器打开?

tcww88 2003-10-19
  • 打赏
  • 举报
回复
自己顶一下

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧