package com.liduxx.uploadfile.web;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLDecoder;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.IOUtils;
@MultipartConfig
public class AjaxFilesUploadServlet extends HttpServlet
{
private static final long serialVersionUID = 513258132164002370L;
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
String fileStr = new String(request.getParameter("filename")
.getBytes("ISO-8859-1"), "utf-8"); //中文乱码
String files[] = fileStr.split(","); //多个文件
//获取文件需要上传到的路径
String path = request.getRealPath("/upload") + File.separator;
JSONObject json = new JSONObject();
json.put("succ", true);
JSONObject jo = new JSONObject();
for (int i = 0; i < files.length; i++)
{
String[] file = files[i].split("\\!");
String id = file[0];
String fileRef = file[1];
String name = fileRef.substring(0, fileRef.lastIndexOf("."));
String type = fileRef.substring(fileRef.lastIndexOf(".") + 1);
long size = getFileSize(path + name + "." + type);
jo.put(id, size);
json.put("data", jo);
}
System.out.println("get返回json数据:" + json);
response.setContentType("text/plain");
response.getWriter().write(json.toString());
}
/** <一句话功能简述>
* 根据文件路径取得文件大小
* @param filePath 文件路径
* @return 返回文件大小
*
* @return long [返回类型说明]
* @exception throws [违例类型] [违例说明]
* @see [类、类#方法、类#成员]
*/
private long getFileSize(String filePath)
{
long size = 0;
File file = new File(filePath);
if (file.exists())
{
size = file.length();
}
return size;
}
/**
* 上传流文件并保存
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
request.setCharacterEncoding("utf-8"); //设置编码
System.out.println("开始访问servlet(dopost) :");
JSONObject json = new JSONObject(); //返回的json串
String filename = ""; //文件名称
String path = request.getRealPath("/upload"); //获取文件需要上传到的路径
try
{
List<FileItem> items = new ServletFileUpload(
new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : items)
{
if (item.isFormField())
{
// Process regular form field (input type="text|radio|checkbox|etc", select, etc).
String fieldname = item.getFieldName();
String fieldvalue = "";
if (fieldname.equals("name"))
{
filename = fieldvalue = URLDecoder.decode(item.getString(),
"UTF-8");
}
else
{
fieldvalue = item.getString();
}
System.out.println("fieldname:" + fieldname
+ "--fieldvalue:" + fieldvalue);
// ... (do your job here)
}
else
{
// Process form file field (input type="file").
String fieldname = item.getFieldName();
//String filename = FilenameUtils.getName(item.getName());
InputStream filecontent = item.getInputStream();
System.out.println("fieldname:" + fieldname + "--filename:"
+ filename + "---filecontent:" + filecontent
+ "---path:" + path);
// item.write( new File(path,filename) );//第三方提供的;
//手动写入硬盘
if (makeDir(path))
{
createFile(path, filename);
}
File file = new File(path + File.separator + filename);
FileOutputStream fos = new FileOutputStream(file, true);
InputStream is = item.getInputStream();
IOUtils.copy(is, fos);
is.close();
fos.close();
System.out.println("获取上传文件的总共的容量:" + item.getSize());
}
}
}
catch (FileUploadException e)
{
e.printStackTrace();
}
/** 前端参数 **/
// String filenameaaa = request.getParameter("name");
// String fileid = request.getParameter("fileid");
// String file = request.getParameter("file");
// String bytestart = request.getParameter("start");
// //获得磁盘文件条目工厂
// DiskFileItemFactory factory = new DiskFileItemFactory();
// //获取文件需要上传到的路径
// String path = request.getRealPath("/upload");
// //创建目录
// makeDir(path);
// //如果没以下两行设置的话,上传大的 文件 会占用 很多内存,
// //设置暂时存放的 存储室 , 这个存储室,可以和 最终存储文件 的目录不同
// /**
// * 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上,
// * 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tem 格式的
// * 然后再将其真正写到 对应目录的硬盘上
// */
// factory.setRepository(new File(path));
// //设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室
// factory.setSizeThreshold(1024*1024) ;
//
// //高水平的API文件上传处理
// ServletFileUpload upload = new ServletFileUpload(factory);
//
//
// try {
// //可以上传多个文件
// List<FileItem> list = (List<FileItem>)upload.parseRequest(request);
//
// for(FileItem item : list)
// {
// //获取表单的属性名字
// String name = item.getFieldName();
//
// //如果获取的 表单信息是普通的 文本 信息
// if(item.isFormField())
// {
// //获取用户具体输入的字符串 ,名字起得挺好,因为表单提交过来�
- 1
- 2
前往页