jsp制作文件上传功能的问题
答案:5 悬赏:70
解决时间 2021-04-18 07:29
- 提问者网友:说不出醉人情话
- 2021-04-17 11:50
我用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表格文件来测试的,结果上传后,字符部分都能正常显示,图片部分都变成乱码了,好像是上传二进制的文件都有问题,请指点一下问题出在哪里,谢谢。
最佳答案
- 二级知识专家网友:偏爱自由
- 2021-04-17 12:42
PrintStream 这个对像我没用过。。可能是这个对像只能支持上传文本吧。。为什么不用SmartUpload 来做上传呢?
全部回答
- 1楼网友:魅世女王
- 2021-04-17 17:07
把你的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);
}
上面这部分代码才是处理二进制文件保存读取与操作的。。。你试试吧。。。
- 2楼网友:哥在撩妹请勿打扰
- 2021-04-17 15:56
上传文件的有很多。我习惯用SmartUpload。我记得apache也有个上传和下载的东西,但是那个要写过滤器才能过滤掉你需要的文件的后缀名称。而SmartUpload只要通过一个方法就可以了。所以用SmartUpload,这个很好用的
- 3楼网友:佛说妍妍很渣
- 2021-04-17 14:24
<%@ 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文件中编译运行就照了
- 4楼网友:开心就好
- 2021-04-17 12:51
引用:PrintStream 这个对像我没用过。。可能是这个对像只能支持上传文本吧。。为什么不用SmartUpload 来做上传呢?- -! 实在是汗, JAVA里面jsp有SmartUpload?
我要举报
大家都在看
推荐资讯