您的位置:首页 > 编程语言 > Java开发

java基于servlet利用common-fileupload上传文件

2016-08-29 10:30 337 查看
例子是servlet下的上传,利用common-fileupload

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.RandomAccessFile;

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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import java.util.Iterator;
import java.util.List;
import java.util.RandomAccess;
import java.util.UUID;


public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try
{
//文件写入位置
long nPos=0;
//获取FileItem的的文件流
InputStream iStream=null;
// 判断enctype属性是否为multipart/form-data
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
//临时目录名
String tempPath = "d:\\temp\\";//"./TempPath/";
//真实目录名
String filePath = "d:\\upload\\";//"./UploadFile/";
//真实上传路径
StringBuffer sbRealPath = new StringBuffer();

// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();

// 当上传文件太大时,因为虚拟机能使用的内存是有限的,所以此时要通过临时文件来实现上传文件的保存
// 此方法是设置是否使用临时文件的临界值(单位:字节)
factory.setSizeThreshold(5*1024);

// 与上一个结合使用,设置临时文件的路径(绝对路径)
factory.setRepository(new File(tempPath));

// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);

// 设置上传内容的大小限制(单位:字节)
upload.setSizeMax(Integer.valueOf(1)*1024*1024);//1MB

// Parse the request
List<?> items = upload.parseRequest(request);

Iterator iter = items.iterator();
while (iter.hasNext())
{
FileItem item = (FileItem) iter.next();

if (item.isFormField())
{
//如果是普通表单字段
String name = item.getFieldName();
String value = item.getString();
//处理普通表单字段
nPos=Integer.parseInt(value);
}
else
{
//如果是文件字段
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
//创建文件唯一名称
String uuid = UUID.randomUUID().toString();
//检查文件后缀格式
String fileExpansion = fileName.substring(fileName.lastIndexOf(".")+1).toLowerCase();
//真实上传路径
sbRealPath.append(filePath).append(fileName).append(".").append(fileExpansion);
System.out.println(sbRealPath.toString());
boolean isInMemory = item.isInMemory();
long receiveSize = item.getSize();
//获取文件流
iStream = item.getInputStream();
//写入文件
//File uploadedFile = new File(sbRealPath.toString());
//item.write(uploadedFile);
}
}
//写入到文件
RandomAccessFile oSavedFile = new RandomAccessFile(sbRealPath.toString(),"rw");
// 定位文件指针到 nPos 位置
oSavedFile.seek(nPos);
System.out.println(nPos);
byte[] b = new byte[1024];
int nRead;
// 从输入流中读入字节流,然后写到文件中
while((nRead=iStream.read(b,0,1024)) > 0)
{
oSavedFile.write(b,0,nRead);
}
//获取当前文件写入位置
long filePosition = oSavedFile.getFilePointer();
System.out.println(filePosition);
iStream.close();
oSavedFile.close();
//返回接收到的字节长度
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.print(filePosition);
out.flush();
out.close();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: