中易网

jsp制作文件上传功能的问题

答案:5  悬赏:70  
解决时间 2021-04-18 07:29

我用jsp制作文件上传功能的时候,只能正常上传文本文件,如果上传二进制文件,打开那文件就会显示乱码。程序代码如下,高手帮忙指导一下,谢谢。

网页文件内容:

<html>
<head>
<title>文件上载</title>
</head>
<body>
<form action="upload.jsp" enctype="MULTIPART/FORM-DATA" method=post>
选择要上载的文件 <input type="file" name="filename" />
<input type="submit" value="上载" />
</form>
</body>
</html>

upload.jsp文件内容:

<jsp:useBean id="up" class="com.idoyu.bean.UpBean" scope="page" />

<%

up.doUpload(request);

%>

javabean文件内容:

package com.idoyu.bean;
import java.io.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletInputStream;
public class UpBean {
public void doUpload(HttpServletRequest request) throws IOException {
PrintStream pw = new PrintStream(new BufferedOutputStream(new FileOutputStream("test.xls")));
ServletInputStream in = request.getInputStream();
int i = in.read();
while (i != -1) {
pw.write(i);
i = in.read();
}
pw.close();
}
}

我是上传一个excel表格文件来测试的,结果上传后,字符部分都能正常显示,图片部分都变成乱码了,好像是上传二进制的文件都有问题,请指点一下问题出在哪里,谢谢。

最佳答案
PrintStream 这个对像我没用过。。可能是这个对像只能支持上传文本吧。。为什么不用SmartUpload 来做上传呢?
全部回答
把你的JavaBean部分的文件写入代码修改成下面的试试: FileOutputStream fos = new FileOutputStream("test.xls"); FileInputStream fis = new FileInputStream(request.getInputStream()); byte [] b = new byte[1024]; int len = 0; while((len=fis.read(b))>0){ fos.write(b , 0 , len); } 上面这部分代码才是处理二进制文件保存读取与操作的。。。你试试吧。。。
上传文件的有很多。我习惯用SmartUpload。我记得apache也有个上传和下载的东西,但是那个要写过滤器才能过滤掉你需要的文件的后缀名称。而SmartUpload只要通过一个方法就可以了。所以用SmartUpload,这个很好用的

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ page import = "java.io.*" %> <%@ page import = "java.util.*" %> <%@ page import = "com.oreilly.servlet.MultipartRequest" %> <%@ page import = "com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %> <% //String dirname="E:/workSpace/edit/WebRoot/UP"; String dirname=getServletContext().getRealPath("/")+"up"; System.out.println(getServletContext().getRealPath("/")); String url=null; String imgWidth=null; String imgHeight=null; String imgBorder=null; File dir=new File(dirname); if(!dir.exists()) dir.mkdir(); int maxsize=1024*1024*5; try { // Use an advanced form of the constructor that specifies a character // encoding of the request (not of the file contents) and a file // rename policy. MultipartRequest multi =new MultipartRequest(request, dirname, maxsize,"utf-8", new DefaultFileRenamePolicy()); Enumeration params = multi.getParameterNames(); imgWidth=multi.getParameter("imgWidth"); imgHeight=multi.getParameter("imgHeight"); imgBorder=multi.getParameter("imgBorder"); Enumeration files = multi.getFileNames(); while (files.hasMoreElements()) { String name = (String)files.nextElement(); url = multi.getFilesystemName(name); } System.out.println(new String(request.getParameter("name").getBytes("iso-8859-1"),"utf-8")); System.out.println(multi.getParameter("name")); } catch (IOException lEx) { this.getServletContext().log(lEx, "error reading or saving file"); out.println("error :"+lEx.getMessage()); } %>

<% File f = new File(getServletContext().getRealPath("/")+"up/"+url); if(f.exists()){%> <script type="text/javascript"> alert("文件已经上传,被存在up/<%=url%>"); window.history.go(-1); </script> <%}else{ out.println("系统找不到你指定的文件,你查看你的输入是否合乎以下规格:<br/>"); out.println("1、你所要上传的必须是10M内的文件<br/>"); out.println("2、你所要要上传的文件是否与你所指定的路径一致<br/>"); out.println("3、流量过大,服务器关闭<br/><br/>"); out.println("<a href=\"test.jsp\">返回上一页</a>"); } %>

如果你想要你的页面和代码分离,那就直接把里面的代码部分放在.java文件中编译运行就照了

引用:PrintStream 这个对像我没用过。。可能是这个对像只能支持上传文本吧。。为什么不用SmartUpload 来做上传呢?- -! 实在是汗, JAVA里面jsp有SmartUpload?
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我也想知道工作能努力吗?
北京欢乐谷能存包么?如果不能那周围哪能存呢
想买个家用洗碗机3000左右那个牌子好
新疆沙湾五彩湾温泉的路线怎么走?
爱情和事业我要先选哪个呢?
1万块在银行活期一个月利息多少?
手机业务取消不掉?
上海大学考研力学专业。
江西银鹏贵金属怎么样?入金门槛多少呀?
好再来蛋糕店加盟费
我在路边宠物店买了猫吃的罐头,结果猫咪吃了
480*272的城际通5620普清3d懒人包 打开GPS端
yo臃肿的近义词
有哪些快递公司的总部在杭州
牛尾巴为什么朝下你? [脑筋急转弯]
推荐资讯
难道警察对物品被盗是否真的不需要拍照做详细
求硬盘EXCEL数据恢复软件
最近要买一套厨卫电器,新居入伙啥都要麻烦,
广东省茂名市可以办理港澳通行证G签证吗?
数学初一计算题!!!!!!!
有的葡萄酒为什么会那么便宜呢?
关于排球的 为什么当一传不到位时,二传不能
我的QQ杀毒了.重装系统了.还是自动发病毒给别
DNF如何才能得到体验服的号
刀劍2劍客怎麼加點??我想拿劍,武器和裝備
400平方米的住房装修要几多钱?
南宁哪家做商标注册代理的比较好!
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?