问题描述
- 大神帮看下这段代码我想把文件上传到webroot下的upload文件夹该怎么改啊
-
package com.chamber.controller.upload;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Iterator;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;public class ProgressUploadServlet extends HttpServlet {
private static final long serialVersionUID = -4935921396709035718L; public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 上传状态 UploadStatus status = new UploadStatus(); // 监听器 UploadListener listener = new UploadListener(status); // 把 UploadStatus 放到 session 里 request.getSession(true).setAttribute("uploadStatus", status); // Apache 上传工具 ServletFileUpload upload = new ServletFileUpload( new DiskFileItemFactory()); // 设置 listener upload.setProgressListener(listener); try { List itemList = upload.parseRequest(request); for (Iterator it = itemList.iterator(); it.hasNext();) { FileItem item = (FileItem) it.next(); if (item.isFormField()) { System.out.println("FormField: " + item.getFieldName() + " = " + item.getString()); } else { System.out.println("File: " + item.getName()); // 统一 Linux 与 windows 的路径分隔符 String fileName = item.getName().replace("/", "\"); fileName = fileName.substring(fileName.lastIndexOf("\")); File saved = new File("C:\upload_test", fileName); saved.getParentFile().mkdirs(); InputStream ins = item.getInputStream(); OutputStream ous = new FileOutputStream(saved); byte[] tmp = new byte[1024]; int len = -1; while ((len = ins.read(tmp)) != -1) { ous.write(tmp, 0, len); } ous.close(); ins.close(); response.getWriter().println("已保存文件:" + saved); } } } catch (Exception e) { e.printStackTrace(); response.getWriter().println("上传发生错误:" + e.getMessage()); } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("Cache-Control", "no-store"); response.setHeader("Pragrma", "no-cache"); response.setDateHeader("Expires", 0); UploadStatus status = (UploadStatus) request.getSession(true) .getAttribute("uploadStatus"); if (status == null) { response.getWriter().println("没有上传信息"); return; } long startTime = status.getStartTime(); long currentTime = System.currentTimeMillis(); // 已传输的时间 单位:s long time = (currentTime - startTime) / 1000 + 1; // 传输速度 单位:byte/s double velocity = ((double) status.getBytesRead()) / (double) time; // 估计总时间 单位:s double totalTime = status.getContentLength() / velocity; // 估计剩余时间 单位:s double timeLeft = totalTime - time; // 已完成的百分比 int percent = (int) (100 * (double) status.getBytesRead() / (double) status .getContentLength()); // 已完成数 单位:M double length = ((double) status.getBytesRead()) / 1024 / 1024; // 总长度 单位:M double totalLength = ((double) status.getContentLength()) / 1024 / 1024; // 格式:百分比||已完成数(M)||文件总长度(M)||传输速率(K)||已用时间(s)||估计总时间(s)||估计剩余时间(s)||正在上传第几个文件 String value = percent + "||" + length + "||" + totalLength + "||" + velocity + "||" + time + "||" + totalTime + "||" + timeLeft + "||" + status.getItems(); response.getWriter().println(value); }
}
解决方案
修正文件保存文件的路径,参考代码如下:
String filePath = getServletContext().getRealPath("/");
filePath +="upload"
File saved = new File(filePath, fileName);
时间: 2024-08-30 14:03:23