servlet-大神帮看下这段代码我想把文件上传到webroot下的upload文件夹该怎么改啊

问题描述

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

servlet-大神帮看下这段代码我想把文件上传到webroot下的upload文件夹该怎么改啊的相关文章

sqlhelper-求大神帮我把这段代码注释下,看不懂啊

问题描述 求大神帮我把这段代码注释下,看不懂啊 SqlParameter[] arParms = new SqlParameter[2]; arParms[0] = new SqlParameter(""@userid"" enamestr); arParms[0].Direction = ParameterDirection.Input; arParms[2] = new SqlParameter(""@right"" Sq

ava基础 代码错误-Java新手,求大神帮小弟看看这段代码哪里错了,多谢!!!

问题描述 Java新手,求大神帮小弟看看这段代码哪里错了,多谢!!! class Student { //姓名 private String name; //年龄 private int age; //构造方法 public Student(){ } public Student(String name, int age){ this.name = name; this.age = age; } public String getName(){ return name; } public voi

用java开发一个安卓客户端在线交流APP,是怎么实现添加好友的?求大神帮我看看这段代码。

问题描述 用java开发一个安卓客户端在线交流APP,是怎么实现添加好友的?求大神帮我看看这段代码. private void submit() { dialog = ProgressDialog.show(this, "提示", "处理中.."); new AsyncTask() { @Override protected String doInBackground(String... params) { String urlString = AppConstan

java 排列组合-求大神帮我看看这段代码,打印完“12345”结束for循环后为什么还能继续运行?新手没金币,抱歉!

问题描述 求大神帮我看看这段代码,打印完"12345"结束for循环后为什么还能继续运行?新手没金币,抱歉! public class Test { public static void main(String[] args) { prints(0 0 0 0 0);}public static void prints(int k1int k2int k3int k4int k5){ if(k5!=0){ System.out.println(k1*10000+k2*1000+k3*1

哪位大神帮我注释这段代码,最好详细一点(AT89s**与霍尔元件测速报警应用)。有附电路的原理图

问题描述 哪位大神帮我注释这段代码,最好详细一点(AT89s**与霍尔元件测速报警应用).有附电路的原理图 5C #includeunsigned char code table[12]={0xc00xf90xa40xb00x990x920x820xf80x800x900xff0xBF};unsigned char code table2[12]={0x400x790x240x300x190x120x020x780x000x100xff}; sbit CS3020=P1^0;sbit SET=P

spring mvc上传文件,文件上传到webroot下,不要发布到保存tomcat下,求解决,在线等待

问题描述 上传的文件我要保存在WebRoot/resources/uploadfile里面,我不要发布保存在D:apache-tomcat-7.0.53webapps下,怎么解决,老保存到tomcat下呢?怕文件丢失 解决方案 解决方案二:上传的时候你指定路径啊.解决方案三:问题是指定的路径始终是tomcat下的,我不要在tomcat下的解决方案四: 解决方案五:引用3楼rui888的回复:恩,这是绝对写死的路径,也是一个方法,但不灵活解决方案六:那你就代码写路径.解决方案七:引用5楼rui88

代码分析-JAVA 求大神帮看下这段代码 怎么修改 救命啊

问题描述 JAVA 求大神帮看下这段代码 怎么修改 救命啊 真心看不懂 public static char[] a(char[] paramArrayOfChar) { char[] arrayOfChar1 = new char[12]; char[] arrayOfChar2 = new char[12]; arrayOfChar2[0] = '?'; arrayOfChar2[1] = '?'; arrayOfChar2[2] = 'o'; arrayOfChar2[3] = '/';

vb.net修改sql数据库老是出现未初始化大神帮看下

问题描述 vb.net修改sql数据库老是出现未初始化大神帮看下 If TextBox1.Text = "" Then MsgBox("课程信息不能为空!") Exit Sub End If Dim myConn As OleDbConnection = New OleDbConnection(strConn) Dim myComm As OleDbCommand = New OleDbCommand myComm.Connection = myConn myCom

c-有没有大神帮看下鄙人写的高斯完全主元素消元法代码哪里出了问题,真心感谢啊!

问题描述 有没有大神帮看下鄙人写的高斯完全主元素消元法代码哪里出了问题,真心感谢啊! /*矩阵A用于存放线性方程组的增广矩阵,向量X表示线性方程组的解 #include #include int main() { double m,p,A[10][10],X[10]; int n,i,j,k,q,l,c,w; char a; printf("请输入方程的阶数(小于等于8):n"); scanf("%d",&n); for(i=1;i<=n;i++)//