百分求解如何把一个中文名的文件传到服务器上!

zhang_ly520 2006-11-01 12:53:38
我现在用下面的方法可以把文件传上去,但是文件在服务器上看是“?”号,可能是不支持中文。
不过我把他下载到本地就成了一排下划线。
其中request中包含由页面中提交的一个文件名。(要是中文就不行)
我想在页面用encodeURI 这个方法做编码转换,可能我对这个方法不是很了解,没成功。
还希望明白人指点一下。

public File upload(HttpServletRequest request, String destDir) {
DiskFileUpload diskFileUpload = new DiskFileUpload();
diskFileUpload.setSizeMax(1000 * 1024 * 1024);// 上传文件的最大值
diskFileUpload.setSizeThreshold(4096);// 超过这个限制写到磁盘上
diskFileUpload.setRepositoryPath("/tmp");// 设置存储临时文件的位置

List fileItems;
try {
fileItems = diskFileUpload.parseRequest(request);
} catch (FileUploadException ex) {
ex.printStackTrace();
return null;
}

Iterator iter = fileItems.iterator();
for (; iter.hasNext();) {
FileItem fileItem = (FileItem) iter.next();
if (!fileItem.isFormField()) {
// 从客户端的文件系统通过浏览器传过来的文件名的基础名称.
String fileName = fileItem.getName();

if (fileName.equals(""))
continue;

String[] possibleSeparator = new String[] { "/", "\\" };
for (int i = 0; i < possibleSeparator.length; i++) {
String separator = possibleSeparator[i];
int index = fileName.lastIndexOf(separator);
if (index != -1) {
fileName = fileName.substring(index+ separator.length());
break;
}
}
Runtime rt = Runtime.getRuntime();
try {
File FileObject = new File(destDir + "/" + fileName);
fileItem.write(FileObject);
String[] cmd = new String[3];
cmd[0] = "/bin/bash";
cmd[1] = "-c";
cmd[2] = "chown mailuid:mailgid \"" + destDir + "/"+ fileName + "\"";
rt.exec(cmd);
cmd[2] = "chmod 600 \"" + destDir + "/" + fileName + "\"";
rt.exec(cmd);

return FileObject;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
}
return null;
}
...全文
357 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruanjiantaotao 2006-11-02
  • 打赏
  • 举报
回复
smartupload 帮你解决中文上传问题
zhang_ly520 2006-11-02
  • 打赏
  • 举报
回复
谢谢大家了~不过按上面的方法没做出来,可能我笨了点!
所以想了一个笨点的方法就是把取路径哪给避开,直接从上传文件后就获得他返回来的路径就没有匹配路径这一步了。没想到还让我蒙对了。
还是要谢谢大家的,分照给,来着有分。
lurkerxh 2006-11-01
  • 打赏
  • 举报
回复
up jf
kubbye 2006-11-01
  • 打赏
  • 举报
回复
一定要编码一致
cocoysy 2006-11-01
  • 打赏
  • 举报
回复
传到服务器上看是??正常,下载下来后变成_符号
查看下下载页面的编码是否和上传文件的编码一样
Sunny319 2006-11-01
  • 打赏
  • 举报
回复
在url传递中文参数前就应该用filename = URLEncoder.encode(filename,"UTF-8");进行编码
你在google上搜索一些中文东西,比如就"中文111"!
地址栏就是:http://www.google.com/search?hl=zh-CN&newwindow=1&q=%E4%B8%AD%E6%96%87111&btnG=%E6%90%9C%E7%B4%A2&lr=
他的中文就被编码成UTF8的格式了%..
zhang_ly520 2006-11-01
  • 打赏
  • 举报
回复
我想问下我这个问题是出在读参数的时候还是把文件传到服务器的过程中的出现的问题
shanshuiboy 2006-11-01
  • 打赏
  • 举报
回复
Sunny319(努力学习java中.) 正解
zhang_ly520 2006-11-01
  • 打赏
  • 举报
回复
我查了下api 原来是java包中的类!~我先研究一下,ok后结分
zhang_ly520 2006-11-01
  • 打赏
  • 举报
回复
但是我们页面要求是UTF-8的怎么办
还有就是这2条命令是一个写在页面一个写在java类里吗?
Sunny319 2006-11-01
  • 打赏
  • 举报
回复
你把文件页面的编码变成GBK.
filename = URLEncoder.encode(filename,"UTF-8");/*把filename按UTF-8编码,这里filename可以是中文*/
filename = URLEncoder.decode(filename,"UTF-8");/*把utf-8编码的字符串解码成对应中文*/

81,092

社区成员

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

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