[资源都是来自网上。本实例将展示使用Flex和java servlet上传文件。 事前准备就是到 http://commons.apache.org 下载common-fileupload-1.1.1.jar以及common-io-1.2.jar两
后台代码:
package com.lk.test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
public class UploadServlet extends HttpServlet {
/**
* 文件上传
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//解析request对象
DiskFileUpload dfu = new DiskFileUpload();
//存放上传文件路径
List fileUrls = new ArrayList();
try {
//解析request中表单所有值放入集合中
List fileItems = dfu.parseRequest(request);
for (FileItem fileItem :fileItems) {
if(fileItem.isFormField()){//如果是文本域
if("desc1".equals(fileItem.getFieldName())){
InputStream in = fileItem.getInputStream();
byte[] bt = new byte[in.available()];
in.read(bt);
in.close();
//获取文本域值
String desc1 = new String(bt,"utf-8");
System.out.println(desc1);
}
if("desc2".equals(fileItem.getFieldName())){
InputStream in = fileItem.getInputStream();
byte[] bt = new byte[in.available()];
in.read(bt);
in.close();
//获取文本域值
String desc2 = new String(bt,"utf-8");
System.out.println(desc2);
}
}else{//否则为文件域
//打印保存上传文件路径
System.out.println(this.getServletContext().getRealPath("upload"));
// if("file1".equals(fileItem.getFieldName())){
if(fileItem.getName()!=null&&!"".equals(fileItem.getName())){
//客户端文件
File remoteFile = new File(fileItem.getName());
//上传文件在服务器端的路径保存集合中
fileUrls.add(request.getContextPath()+"/upload/"+remoteFile.getName());
//定义服务器下文件
File servFile = new File(this.getServletContext().getRealPath("upload"),remoteFile.getName());
//创建文件夹
servFile.getParentFile().mkdirs();
//读取客户端文件输入流
InputStream in = fileItem.getInputStream();
//定义写入服务器文件流
OutputStream os = new FileOutputStream(servFile);
//定义字节数组
byte[] bt = new byte[in.available()];
//对流进行读和写
for (;;) {
int len = in.read(bt);
if(len==-1){
break;
}
os.write(bt, 0, len);
}
//关闭输入输出流
if(os!=null){
os.flush();
os.close();
}
if(in!=null){
in.close();
}
}
// }
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
PrintWriter out = response.getWriter();
out.print("上传成功!");
out.print("
");
for (int i = 0; i < fileUrls.size(); i++) {
out.print("上传文件"+(i+1)+"");
out.print("
");
}
out.flush();
out.close();
}
}
jsp前台代码
上传文件
文件上传一:
文件一说明:
文件上传二:
文件二说明:
所用到jar
commons-fileupload.jar
commons-io.jar
浏览器打开中文文件名的问题解决
解决办法:
第一步,修改tomcat的服务器配置文件(server.xml)
在connector上加入:URIEncoding="UTF-8"
加入后的结果形式如下:
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/>
第二步,重新启动tomcat
第三步,修改IE的配置参数
在IE菜单的“工具”-->“internet选项”中,
将“总是以utf-8发送URL”前的勾号选上,
第四步,关闭所有IE窗口,重新打开IE。
如果是Apache与Tomcat配合搭建web平台的,还要修改(或加入)ajp连接器的URIEncoding选项。 】
希望碰到类似问题的朋友们注意。
[没有中文乱码问题。 1. 客户端使用HTML + JavaScript(AJAX)
Uploa