gpt4 book ai didi

java - servlet文件上传文件名编码

转载 作者:太空狗 更新时间:2023-10-29 22:55:28 25 4
gpt4 key购买 nike

我正在使用 Apache Commons Fileupload 工具进行标准文件上传。我的问题是,如果上传文件包含特殊字符(á、é、ú 等),我将无法获得正确的文件名。它们都会转换为?迹象。

request.getCharacterEncoding() 说的是 UTF-8,但我在字符串 fileItem.getName() 中得到的字节对于我所有的特殊字符都是相同的。

你能帮我看看哪里出了问题吗?

(一些细节:在 Windows 上使用 Firefox 3.6.12、Weblogic 10.3)

这是我的代码片段:

 public CommandMsg(HttpServletRequest request) {
Enumeration names = null;
if (isMultipart(request)) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List uploadedItems = upload.parseRequest(request);
Iterator i = uploadedItems.iterator();
FileItem fileItem = null;
while (i.hasNext()) {
fileItem = (FileItem) i.next();
if (fileItem.isFormField()) {
// System.out.println("isFormField");
setAttribute(fileItem.getFieldName(), fileItem.getString());
} else {
String enc = "utf-8";
enc = request.getCharacterEncoding();
String fileName = fileItem.getName();
byte[] fnb = fileItem.getName().getBytes();
byte[] fnb2 = null;
try {
fnb2 = fileItem.getName().getBytes(enc);
String t1 = new String(fnb);
String t2 = new String(fnb2);
String t3 = new String(fnb, enc);
String t4 = new String(fnb2, enc);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
setAttribute(fileItem.getFieldName(), fileItem);
}
}
} catch (FileUploadException ex) {
ex.printStackTrace();
}

// etc..

最佳答案

我遇到了同样的问题,然后这样解决了。

ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");

FileItemIterator iter = upload.getItemIterator(request);
while (iter.hasNext()) {
FileItemStream item = iter.next();
String name = item.getFieldName();
InputStream stream = item.openStream();
if (item.isFormField()) {
String value = Streams.asString(stream, "UTF-8");
}
}

如果您的代码基于 http://commons.apache.org/fileupload/streaming.html 中提供的示例那么你需要确保在上面的两个地方设置了UTF-8。

关于java - servlet文件上传文件名编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5021295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com