0 0

fileupload 为什么InputStream getInputStream()方法无法获取临时文件里的文件5

package com.wgh.servlet;

import java.io.*;
import java.util.*;

import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String uploadPath=getServletContext().getRealPath("/")+"upload";          //定义上传文件的地址
System.out.println(uploadPath);

File folder = new File(uploadPath);
if(!folder.exists())
folder.mkdirs();
String message=null;
String content=null;
String dtme=null;
if(ServletFileUpload.isMultipartContent(request)){  //判断是否获取的是文件

System.out.print("是文件");
DiskFileItemFactory disk=new DiskFileItemFactory();
disk.setSizeThreshold(20*1024);                 //设置内存可存字节数
disk.setRepository(disk.getRepository());       //设置临时文件目录
ServletFileUpload up=new ServletFileUpload(disk);
int maxsize=2*1024*1024;
List list=null;
try{
list=up.parseRequest(request);              //获取上传列表
}
catch(Exception e){
e.printStackTrace();
}
Iterator i=list.iterator();                     //创建列表的迭代器
while(i.hasNext()){
FileItem fm=(FileItem)i.next();             //遍历列表

if(!fm.isFormField()){
String filePath = fm.getName(); //获取文件全路径名
String fileName="";
int startIndex = filePath.lastIndexOf("\\");
if(startIndex!=-1){ //对文件名进行截取
fileName = filePath.substring(startIndex+1);
}else{
fileName=filePath;
}
if(fm.getSize()>maxsize){
message="文件太大了,不要超过2MB";
break;
}
String fileSize=new Long(fm.getSize()).toString();
if((fileName==null)||(fileName.equals(""))&&(fileSize.equals("0"))){
message="文件名不能为空,文件大小也不能为零!";
break;
}
File saveFile=new File(uploadPath,fileName);
System.out.println(uploadPath);
try{
fm.write(saveFile);                //向文件中写入数据
message="文件上传成功!";
<span style="color: #FF0000;">InputStream  inStream=fm.getInputStream();</span>//这行报错
System.out.println("hhhhhh");
}
catch(Exception e1){
e1.printStackTrace();
}
}
else{
String foename=fm.getFieldName();     //获取表单元素名
String con=fm.getString("UTF-8");       //获取表单内容,注意编码方式
//表单元素
if(foename.equals("upDe")){
content = con;
System.out.println("ok1");
}
else if(foename.equals("uptime")){
dtme = con;
System.out.println("ok2");
}
}
}
}
else
{
System.out.println("不是文件");
}
request.setAttribute("result",message);
request.setAttribute("upDe",content);
request.setAttribute("dtme",dtme);
RequestDispatcher rd=request.getRequestDispatcher("message.jsp");
rd.forward(request, response);
}

public void init(ServletConfig config) throws ServletException {
super.init(config);
}

}


当文件超过20k时就会报错,

java.io.FileNotFoundException: C:\Users\wsn\AppData\Local\Temp\upload__1c3b5e7d_1476c27ed8a__7fff_00000006.tmp (系统找不到指定的文件。)

到底是怎样读取临时文件的文件流呢

这是index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
  <head>
    <title>通过commons-fileupload获取其他表单元素</title>
<style type="text/css">
table{
font-size: 13px;

}
input{
font-size: 12px;

}
</style>
  </head>
 
   <body>
   <%!
   Date now=new Date();
   String form=String.format("%tF",now);
   %>
    <form method="post" action="UploadServlet" enctype="multipart/form-data">
    <table background="bg.jpg" width="400" height="200">
    <tr>
    <td height="20" colspan="2"></td>
    </tr>
    <tr>
    <td align="center" colspan="2">【应用Commons-FileUpload获取其他表单元素】</td>
    </tr>
      <tr>
    <td height="20" colspan="2"></td>
    </tr>
    <tr>
    <td align="right">选择文件:</td>
    <td > <input type="file" name="file1"></td>
    </tr>
    <tr>
    <td align="right">文件描述:</td>
    <td >  <input type="text" name="upDe" ></td>
    </tr>
     <tr>
    <td align="right">上传时间:</td>
    <td >  <input type="text" name="uptime"  value=<%=form%>></td>
    </tr>
    <tr>
    <td align="center"></td>
    <td > <input type="submit" value="开始上传"></td>
   
    </tr>
  <tr>
    <td height="40" colspan="2"></td>
    </tr>
    </table>
    </form>
  </body>
</html>
2014年7月25日 14:55

2个答案 按时间排序 按投票排序

0 0

采纳的答案

我在机器上试了。

1、你的这一行报错,InputStream  inStream=fm.getInputStream();读不到文件,是应为fm是临时文件,上传成功后已经不存在了,所以你试图读取时报找不到文件的错误。


2、如果你想读文件流 ,可以这样读

InputStream inStream =  new FileInputStream(saveFile);


2014年7月25日 16:52
0 0

楼主粗心啊    你设置了上传上限为20k  

disk.setSizeThreshold(20*1024);        当然会出错   手机回复   求给分

2014年7月25日 16:13

相关推荐

    使用fileupload组件实现文件上传功能

    使用fileupload组件实现文件上传功能 FileUpload组件是Apache提供的一款文件上传组件,能够帮助我们轻松实现文件上传功能。下面我们将详细介绍使用FileUpload组件实现文件上传功能的步骤和要点: 首先,需要引入两...

    commons-fileupload文件上传实例代码

    - `FileItem`接口提供了一些便利的方法,如`write(File)`用于将文件写入目标位置,`delete()`用于删除临时文件,以及获取文件内容的`InputStream`。 - `ServletFileUpload`还支持设置最大文件大小、最大总体上传...

    java文件上传 FileUpload

    InputStream is = item.getInputStream(); // 获取文件流 // 这里可以进行文件保存操作,例如保存到服务器的某个目录 // ... is.close(); // 关闭输入流 } else { // 处理普通表单字段 } } } catch ...

    利用org.apache.commons.fileupload上传多个文件

    3. **FileItem**:提供了访问上传文件和表单字段的方法,如 `isFormField()`、`getFieldName()`、`getName()`、`getInputStream()` 等。 4. **上传文件保存**:通常,我们需要将 `FileItem` 的输入流写入服务器指定...

    DiskFileItemFactory实现文件上传 FileInputStream

    在上述代码中,`item.getInputStream()`返回一个`InputStream`,我们可以用`FileInputStream`将其包装,然后进行进一步的文件操作。 总结来说,`DiskFileItemFactory`与`FileInputStream`在Java文件上传中扮演了...

    java实现文件的上传.docx

    Java 实现文件上传的核心点可以分为三个部分:文件上传的基本要求、获取上传的文件内容、使用 Apache-fileupload 处理文件上传框架。 首先,文件上传的基本要求包括三个方面:使用 `&lt;input type="file" /&gt;` 声明一...

    JSF实现的文件上传

    try (InputStream inputStream = file.getInputStream()) { // 检查文件大小、类型等 // 将文件保存到服务器 } catch (IOException e) { // 处理异常 } } ``` ### 4. 大文件上传 对于大文件上传,JSF默认...

    java实现的文件上传

    2. **处理请求**: 在Servlet的`doPost`方法中,使用`HttpServletRequest`的`getParts()`方法获取上传的文件部分。 3. **读取文件**: 对每个Part,我们可以通过`Part`接口提供的方法,如`getInputStream()`读取文件...

    FileUpload

    InputStream fileContent = filePart.getInputStream(); // 这里可以将文件内容写入到临时或持久化存储 } ``` 接下来,我们要讨论OOS服务,它是一种云存储解决方案,用于存储和检索大量数据。OOS服务提供商如阿里...

    commons-fileupload 以及示例

    虽然`commons-fileupload`自身包含了基本的文件操作功能,但`commons-io`能为开发者提供更高级的功能和更灵活的控制。 实现文件上传的步骤大致如下: 1. **设置Servlet容器**:确保Servlet容器(如Tomcat)支持多...

    jsp文件上传的两种方法

    在`doPost`方法中,使用`HttpServletRequest`的`getPart()`方法获取上传的文件。 ```java protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, ...

    servlet上传文件(前)----得到http请求消息的内容

    确保在处理完文件后关闭输入流,并在出现异常时清理可能创建的临时文件。使用try-with-resources语句可以帮助自动关闭资源。 总结来说,通过Servlet实现文件上传需要理解HTTP请求的结构,利用`HttpServletRequest`...

    JSP页面中的文件上传类

    在这个例子中,`getPart`方法用于获取文件Part,`getSubmittedFileName`获取原始文件名,然后通过`InputStream`保存文件。 四、安全与优化 在处理文件上传时,还需要考虑以下几点: 1. 验证文件类型和大小,防止...

    commons-fileupload 上传组件

    `Commons FileUpload`允许自定义许多配置参数,如设置临时文件存储路径、内存阈值(超过该阈值,文件将被写入磁盘)以及是否允许空文件等。这些参数可以使用`FileUpload`构造函数或`FileItemFactory`进行设置。 ###...

    java 文件上传工具类 文件及文本数据

    可以直接使用`HttpServletRequest`的`getParts()`方法来获取上传的文件部分。 5. **文件流操作** 在Java中,处理文件通常涉及`InputStream`和`OutputStream`。在上传过程中,你需要从`FileItem`或`Part`获取输入流...

    commons.fileupload-1.2.0

    InputStream content = item.getInputStream(); // 在这里保存文件或处理文件内容 } } } catch (FileUploadException e) { // 处理上传异常 e.printStackTrace(); } ``` 标签"commons"指的是这个库属于Apache...

    JSP实现快速上传文件的方法

    - `getFileUpload` 方法用于处理文件上传,包括获取文件开始的边界标识,读取文件内容,并最终将文件保存到指定路径。 需要注意的是,这里的代码是一个简化的示例,没有完全展示文件上传的整个流程,且可能不包含...

    java 上传多个文件

    InputStream inputStream = item.getInputStream(); // 这里可以处理文件,如保存到服务器 } else { // 处理普通表单字段 } } ``` 4. **文件保存**:获取到文件的输入流后,你需要将其保存到服务器的某个...

    解决java enctype multipart form-data文件上传传值问题

    InputStream fileContent = item.getInputStream(); // 获取文件内容 // 这里可以添加处理文件的具体逻辑,例如保存到服务器或者进一步解析 // 假设我们读取的是Excel文件 Workbook workbook = Workbook....

    servlet实现多文件上传

    在`doPost()`方法中,我们可以使用`HttpServletRequest`的`getParts()`方法获取所有上传的文件。 ```java protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ...

Global site tag (gtag.js) - Google Analytics