一 、处理带说明信息的图片与处理文件上传
|
| |
|
| |
getContentType() 获取文档的类型 | ||
getFieldName() 获取字段的名称,即name=xxxx <input type=”file” name=”img”/> | ||
getInputStream() | ||
getName() 获取文件名称。 如果是在IE获取的文件为 c:\aaa\aaa\xxx.jpg –即完整的路径。 非IE;文件名称只是 xxx.jpg | ||
|
| |
long | getSize() 获取文件大小 相当于in.avilivable(); | |
如果你上传是一普通的文本元素,则可以通过以下方式获取元素中的数据 <form enctype=”multipart/form-data”> <input type=”text” name=”name”/> | ||
getString() 用于获取普通的表单域的信息。 | ||
getString(String encoding) 可以指定编码格式 | ||
void | write(File file) 直接将文件保存到另一个文件中去。 | |
以下文件用判断一个fileItem是否是file(type=file)对象或是text(type=text|checkbox|radio)对象: | ||
|
|
代码:
public class UpDescServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");//可以获取中文的文件名
String path = getServletContext().getRealPath("/up");
DiskFileItemFactory disk =
new DiskFileItemFactory();
disk.setRepository(new File("d:/a"));
try{
ServletFileUpload up =
new ServletFileUpload(disk);
List<FileItem> list = up.parseRequest(request);
for(FileItem file:list){
//第一步:判断是否是普通的表单项
if(file.isFormField()){
String fileName = file.getFieldName();//<input type="text" name="desc">=desc
String value = file.getString("UTF-8");//默认以ISO方式读取数据
System.err.println(fileName+"="+value);
}else{//说明是一个文件
String fileName = file.getName();
fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
file.write(new File(path+"/"+fileName));
System.err.println("文件名是:"+fileName);
System.err.println("文件大小是:"+file.getSize());
file.delete();
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
二 处理文件上传(性能能够相对之前提升)
核心点用FileItemIterator it= up.getItemIterator(request);处理文件上传。
package cn.hx.servlet;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
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.FileItem;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.RequestContext;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.servlet.ServletRequestContext;
import org.apache.commons.io.FileUtils;
public class FastServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String path = getServletContext().getRealPath("/up");
DiskFileItemFactory disk =
new DiskFileItemFactory();
disk.setRepository(new File("d:/a"));
try{
ServletFileUpload up = new ServletFileUpload(disk);
//以下是迭代器模式
FileItemIterator it= up.getItemIterator(request);
while(it.hasNext()){
FileItemStream item = it.next();
String fileName = item.getName();
fileName=fileName.substring(fileName.lastIndexOf("\\")+1);
InputStream in = item.openStream();
FileUtils.copyInputStreamToFile(in,new File(path+"/"+fileName));
}
}catch(Exception e){
e.printStackTrace();
}
}
}