jsp的swfupload上传,再xp,2003下能正常运行,
但服务器是linux的,放linux上代码出错,
不能上传,同一个文件上传两次的话,文件能
上传成功,但文件内容变成空值,当文件名为
中文文件名时,出现乱码。
请高手帮忙修改代码,
以下是获得文件上传后的代码。
<%@ page contentType="text/html; charset=UTF-8" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="java.io.*"%> 
<%@ page import="java.util.*"%> 
<%@ page import="javax.servlet.*"%> 
<%@ page import="javax.servlet.http.*"%> 
<html> 
<head> 
<title> upFile </title> 
</head> 
<body> 
<center> 
<%
String rootPath;
DataInputStream in = null;
FileOutputStream fileOut = null;
String serverName = request.getServerName();
String realPath = request.getRealPath("/");
rootPath = realPath + "/upload/"; 
String contentType = request.getContentType(); 
try{ 
if(contentType.indexOf("multipart/form-data") >= 0){
in = new DataInputStream(request.getInputStream()); 
int formDataLength = request.getContentLength(); 
byte dataBytes[] = new byte[formDataLength]; 
int byteRead = 0; 
int totalBytesRead = 0;
while(totalBytesRead < formDataLength){
byteRead = in.read(dataBytes,totalBytesRead,formDataLength); 
totalBytesRead += byteRead; 

String file = new String(dataBytes,"UTF-8");
String saveFile = file.substring(file.indexOf("filename=\"") + 10); 
saveFile = saveFile.substring(0,saveFile.indexOf("\n")); 
saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\"")); 
int lastIndex = contentType.lastIndexOf("="); 
String boundary = contentType.substring(lastIndex + 1,contentType.length()); 
String fileName = rootPath + saveFile;
int pos; 
pos = file.indexOf("filename=\""); 
pos = file.indexOf("\n",pos) + 1; 
pos = file.indexOf("\n",pos) + 1; 
pos = file.indexOf("\n",pos) + 1; 
int boundaryLocation = file.indexOf(boundary,pos) - 4; 
int startPos = ((file.substring(0,pos)).getBytes()).length;
int endPos = ((file.substring(0,boundaryLocation)).getBytes()).length; 
File checkFile = new File(fileName); 
if(checkFile.exists()){
return;

File fileDir = new File(rootPath); 
if(!fileDir.exists()){ 
fileDir.mkdirs(); 
}
fileOut = new FileOutputStream(fileName);
fileOut.write(dataBytes,startPos,(endPos - startPos)); 
fileOut.close(); 
}else{ 
String content = request.getContentType(); 

}catch(Exception ex){ 
throw new ServletException(ex.getMessage()); 

%> 
</center> 
</body> 
</html>

解决方案 »

  1.   

    windows 里面的URL地址 和linux的不一样 你看看是不是这的 我就知道这么多了
      

  2.   

    最上边加一个 request.setCharacterEncoding("UTF-8")试试看
      

  3.   

    <%@ page contentType="text/html; charset=UTF-8" l这个是输出编码吧,pageEncoding才是页面编码,FLEX也是使用UTF8啊.
    至于空值,可以断点不?进去看看到底东西传过来了没有?
    int pos; 
    pos = file.indexOf("filename=\""); 
    pos = file.indexOf("\n",pos) + 1; 
    pos = file.indexOf("\n",pos) + 1; 
    pos = file.indexOf("\n",pos) + 1; 
    int boundaryLocation = file.indexOf(boundary,pos) - 4; 
    int startPos = ((file.substring(0,pos)).getBytes()).length;
    int endPos = ((file.substring(0,boundaryLocation)).getBytes()).length;
    这些是干什么 的SWF必须要这样的?没用过
    之前我自己写的Flex上传Servlet也不要这样的.如果文件是空的话,那开始点和结束点是不是一样了,所以长度为0.或者根本读取Request值 就是空的.
    rootPath = realPath + "/upload/"; 似乎使用\\upload\\更好
      

  4.   

    //谢谢,空值的问题解决了!!
    现在是中文文件上传到linux服务器出现乱码!
      

  5.   

     可否请教下中文文件上传到LINUX服务器出现乱码的问题?