FireMemorySky 2016-01-12 04:33 采纳率: 50%
浏览 1470
已采纳

大神帮看下这段代码我想把文件上传到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);
}

}

  • 写回答

1条回答 默认 最新

  • 毕小宝 博客专家认证 2016-01-12 05:35
    关注

    修正文件保存文件的路径,参考代码如下:

     String filePath = getServletContext().getRealPath("/");
     filePath +="upload"
     File saved = new File(filePath, fileName);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥15 Oracle触发器记录修改前后的字段值
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题