关于SERVLET上传文件的问题

问题描述

这是我的页面<formid="ab"action="student.do?method=addStudentForCardReader"method="post"enctype="multipart/form-data"><p>shangchuan<inputtype="file"id="up"name="up"></p><inputtype="submit"value="submit"></form>java代码InputStreamsis=request.getInputStream();System.out.println(sis.available());FileOutputStreamfos=newFileOutputStream("/tmp/2.jpg");byte[]b=newbyte[sis.available()];sis.read(b);for(inti=0;i<b.length;i++){System.out.println(b[i]);}fos.write(b);fos.flush();sis.close();fos.close();获取到的流大小始终为零,请帮忙解决下,在线等。。

解决方案

解决方案二:
FileOutputStreamfos=newFileOutputStream("/tmp/2.jpg");这句干嘛的?看不懂
解决方案三:
sis.available()这个应该打印0吧?byte[]设置为256,然后循环读,直到read()==-1就退出
解决方案四:
方法:availablepublicintavailable()throwsIOException返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。下一个调用可能是同一个线程,也可能是另一个线程。一次读取或跳过此估计数个字节不会受阻塞,但读取或跳过的字节数可能小于该数。注意,有些InputStream的实现将返回流中的字节总数,但也有很多实现不会这样做。试图使用此方法的返回值分配缓冲区,以保存此流所有数据的做法是不正确的。如果已经调用close()方法关闭了此输入流,那么此方法的子类实现可以选择抛出IOException。类InputStream的available方法总是返回0。此方法应该由子类重写。这是javaApi的解释,由此可以看出楼主用这个方法来分配缓冲区是不对的,因为总是0.可以这样来分配byte[]buff=newbyte[2048];
解决方案五:
+1引用3楼longxing8000的回复:

方法:availablepublicintavailable()throwsIOException返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。下一个调用可能是同一个线程,也可能是另一个线程。一次读取或跳过此估计数个字节不会受阻塞,但读取或跳过的字节数可能小于该数。注意,有些InputStream的实现将返回流中的字节总数,但也有很多实现不会这样……

解决方案六:
引用3楼longxing8000的回复:

方法:availablepublicintavailable()throwsIOException返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。下一个调用可能是同一个线程,也可能是另一个线程。一次读取或跳过此估计数个字节不会受阻塞,但读取或跳过的字节数可能小于该数。注意,有些InputStream的实现将返回流中的字节总数,但也有很多实现不会这……

+1
解决方案七:
上传一般都是先把提交的内容转化为file对象
解决方案八:
就算是使用缓冲区进行读取。你这样的做法仍然是不对的首先按照HTTP协议,上来应该要解析HTTP头然后在最后,才是数据区。
解决方案九:
引用7楼rainsilence的回复:

就算是使用缓冲区进行读取。你这样的做法仍然是不对的首先按照HTTP协议,上来应该要解析HTTP头然后在最后,才是数据区。

楼上说正确。使用对“multipart/form-data”类型的数据进行解析吧。

时间: 2024-07-30 14:41:22

关于SERVLET上传文件的问题的相关文章

Servlet 上传文件

Java Web中在不使用第三方jar的情况下如何使用servlet 上传文件呢? (1)上传表单,文件名为upload_servlet.jsp,内容如下:   Html代码   <?xml version="1.0" encoding="UTF-8" ?>   <%@ page language="java" contentType="text/html; charset=UTF-8"       page

Servlet上传文件

今天为大家介绍一下如何用Servlet处理文件的上传,我们需要借助Apache Commons FileUpload包,同时需要Apache Commons IO包. 下面我们来编写处理文件上传的Servlet代码: package com.gujin.servlet; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; import javax.se

JAVA SERVLET上传文件的样码

import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import javax.servlet.ServletContext; import j

jsp上传文件,为什么一直报servlet异常,在别个电脑上面却可以正确运行

问题描述 jsp上传文件,为什么一直报servlet异常,在别个电脑上面却可以正确运行 <%@ page contentType=""text/html; charset=GBK""%><%@ page import=""java.io.*""%><%@ page import=""java.util.*""%><%@ page import=&

tomcat-用JSP页面上传文件转到servlet处理时提示requested resource is not available

问题描述 用JSP页面上传文件转到servlet处理时提示requested resource is not available 我是利用JSP和servlet上传图像,自己写代码和从网上找的代码都是运行到点击上传按钮之后就提示HTTP Status 404(The requested resource is not available),我查看了文件位置.名称都没有错误,另外Tomcat也配置了,否则工程前面的页面无法显示,web.xml里面也配置了servlet的相关事项.一直找不到原因.w

【java】利用servlet解析报文,上传文件

由于工作需要,需要做一个excel导入的功能,这就需要上传excel文件到服务器,服务器做逻辑判断此文件是否是excel文件,接着利用poi的api就可以将内容转化为利用jdbc插入到数据库,达到批量数据导入的功能. 废话不多说,这其中上传文件有两种实现方式,一种是直接接到输入流,解析这个输入流,将里面的报文数据剔除,将剩下的文件写入到文件流,放到服务器上,这个是很早之前的解决思路,我们已经很少使用了,它不停的在操作数组,但是网上研究这个输入流的文章不多,写下来,没准对有兴趣的童鞋来说也是一件好

java Servlet与 Ajax显示上传文件进度

网页显示文件上传进度问题的分析: 显示上传进度的前提是获得上传的进度信息.我们可以想到的就是监听器,同时这有可以分两种情况:监听器可以放服务端,也可以放客户端. 下面的方法,其实更多的关键是前端,后端的话,可以用其他语言处理. 下面是对几种方法的总结: ##demo1 这种方式的服务端 使用commons FileUpload库的 ProgressListener 来监控进度,也就说进度情况是保存在服务端的,如果客户端想要知道进度,需要再次发起请求. 如果客户端想在一个页面完成,可以调用js到服

IE上传文件到服务器

前言:项目用的是struts1,想要上传文件必须用jsp,传输指定类型写struts1标签,这样局限性太强,果断放弃,写一个servlet来实现. web.xml <servlet> <display-name>UploadServlet</display-name> <servlet-name>UploadServlet</servlet-name> <servlet-class>com.phlx.product.wx.action

JSP实现上传文件的两种方法

js|上传 在用Java开发企业器系统的使用,特别是涉及到与办公相关的软件开发的时候,文件的上传是客户经常要提到的要求.因此有 一套很好文件上传的解决办法也能方便大家在这一块的开发. 首先申明,该文章是为了自己记录一备以后开发需要的时候,不用手忙脚乱哈哈........ 现在在国内用的非常多的一般是两种方法解决来解决文件上传. cos.jar + uploadbean.jar + filemover.jar 这个是用的非常普遍的,原因是因为他操作方便,是我们不必再去关注,那些文件的输入和输出流,