如何获取上传文件的输入流

时间:2023-02-24 20:41:26
用io实现文件上传的时候,如何在servlet中获取上传文件的输入流啊?

10 个解决方案

#1


你说的太抽象了,用httpServletRequest这个参数中可以得到输入流,能给出具体代码?

#2


取决与你的上传组件  smartupload  struts1 struts2 fileupload?

#3


引用 1 楼 a962601835 的回复:
你说的太抽象了,用httpServletRequest这个参数中可以得到输入流,能给出具体代码?

我试过从requet中获取inputstream,不管用

#4


引用 2 楼 SDN_SUPERUSER 的回复:
取决与你的上传组件  smartupload  struts1 struts2 fileupload?

就是不想用组件,实现文件上传

#5


引用 4 楼 chaoowang 的回复:
引用 2 楼 SDN_SUPERUSER 的回复:取决与你的上传组件  smartupload  struts1 struts2 fileupload?
就是不想用组件,实现文件上传

这个不会么

#6


是无组件上传文件?

#7


我告诉你,什么都不用就可以实现基于WEB上传文件
只要提交表单时候声明支持
<FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD=POST>
File to process: <INPUT NAME="userfile1" TYPE="file">
<INPUT TYPE="submit" VALUE="Send File">
</FORM>
然后从HTTP协议的Request中读取即可

#8


InputStream in = request.getInputStream();
ObjectInputStream ois = new ObjectInputStream(in);
TableBean table=new TableBean();
table=(TableBean)ois.readObject();
这是我的一个列子,是写在servle里面的,我是接受的一个bean,看是否能帮助LZ.

#9


http://www.iteye.com/topic/66945
用servlet 用fileupload  可以参考 一下这个篇文章
看doPost()那一段 
while(i.hasNext()) {    
19.            FileItem fi = (FileItem)i.next();    
20.            // 获得文件名,这个文件名包括路径:    
21.            String fileName = fi.getName();    
22.            // 在这里可以记录用户和文件信息    
23.            // ...    
24.            // 写入文件,暂定文件名为a.txt,可以从fileName中提取文件名:    
25.            fi.write(new File(uploadPath + "a.txt"));    
26.        } 


fi.getInputStream()可以取到 文件流

#10



/**
 * 检测接受请求内容工具
 */
  public static void observe() {
          String name,pvalue;
          Object avalue;
          Enumeration enum1;
          HttpServletRequest  request=Struts2Util.getRequest();
          System.out.println("/***************** Request Observer (Author: Alex Nie)**************/");
          // observe Request Header
          enum1 = request.getHeaderNames();
          System.out.println("Request Header:");
          while (enum1.hasMoreElements()) {
              name = (String)enum1.nextElement();
              pvalue = request.getHeader(name);
              System.out.println("  " + name + " ---- " + pvalue);
          }
          enum1 = request.getParameterNames();
   
          // observe Request Parameters
          System.out.println("Request Parameters:");
          while (enum1.hasMoreElements()) {
              name = (String)enum1.nextElement();
              pvalue = request.getParameter(name);
              System.out.println("  " + name + " ---- " + pvalue);
          }
          enum1 = request.getAttributeNames();
   
          // observe Request Attributes
          System.out.println("Request Attributes:");
          while (enum1.hasMoreElements()) {
              name = (String)enum1.nextElement();
              avalue = request.getAttribute(name);
              System.out.println("  " + name + " ---- " + avalue);
              
              // observe OgnlValueStack bind by Struts 2
              if (avalue instanceof OgnlValueStack) {
                  avalue = (OgnlValueStack)avalue;
                  Map<String,Object> m = ((OgnlValueStack) avalue).getContext();
                  System.out.println("  >> OgnlValueStack:");
                  Iterator it = m.keySet().iterator();
                  Object key;
                  while (it.hasNext()) {
                      key = it.next();
                      System.out.println ("        " + key + " ---- " + m.get(key));
                  }
              }
          }


给你一段检查接受内容的代码。看FILE类型的数据被放在哪个地方。不过这个是基于struts2,需要自己改一下才可以使用。或者你不用我这段代码。自己在代码里面获取一个request 然后断点查看request里面的内容

#1


你说的太抽象了,用httpServletRequest这个参数中可以得到输入流,能给出具体代码?

#2


取决与你的上传组件  smartupload  struts1 struts2 fileupload?

#3


引用 1 楼 a962601835 的回复:
你说的太抽象了,用httpServletRequest这个参数中可以得到输入流,能给出具体代码?

我试过从requet中获取inputstream,不管用

#4


引用 2 楼 SDN_SUPERUSER 的回复:
取决与你的上传组件  smartupload  struts1 struts2 fileupload?

就是不想用组件,实现文件上传

#5


引用 4 楼 chaoowang 的回复:
引用 2 楼 SDN_SUPERUSER 的回复:取决与你的上传组件  smartupload  struts1 struts2 fileupload?
就是不想用组件,实现文件上传

这个不会么

#6


是无组件上传文件?

#7


我告诉你,什么都不用就可以实现基于WEB上传文件
只要提交表单时候声明支持
<FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD=POST>
File to process: <INPUT NAME="userfile1" TYPE="file">
<INPUT TYPE="submit" VALUE="Send File">
</FORM>
然后从HTTP协议的Request中读取即可

#8


InputStream in = request.getInputStream();
ObjectInputStream ois = new ObjectInputStream(in);
TableBean table=new TableBean();
table=(TableBean)ois.readObject();
这是我的一个列子,是写在servle里面的,我是接受的一个bean,看是否能帮助LZ.

#9


http://www.iteye.com/topic/66945
用servlet 用fileupload  可以参考 一下这个篇文章
看doPost()那一段 
while(i.hasNext()) {    
19.            FileItem fi = (FileItem)i.next();    
20.            // 获得文件名,这个文件名包括路径:    
21.            String fileName = fi.getName();    
22.            // 在这里可以记录用户和文件信息    
23.            // ...    
24.            // 写入文件,暂定文件名为a.txt,可以从fileName中提取文件名:    
25.            fi.write(new File(uploadPath + "a.txt"));    
26.        } 


fi.getInputStream()可以取到 文件流

#10



/**
 * 检测接受请求内容工具
 */
  public static void observe() {
          String name,pvalue;
          Object avalue;
          Enumeration enum1;
          HttpServletRequest  request=Struts2Util.getRequest();
          System.out.println("/***************** Request Observer (Author: Alex Nie)**************/");
          // observe Request Header
          enum1 = request.getHeaderNames();
          System.out.println("Request Header:");
          while (enum1.hasMoreElements()) {
              name = (String)enum1.nextElement();
              pvalue = request.getHeader(name);
              System.out.println("  " + name + " ---- " + pvalue);
          }
          enum1 = request.getParameterNames();
   
          // observe Request Parameters
          System.out.println("Request Parameters:");
          while (enum1.hasMoreElements()) {
              name = (String)enum1.nextElement();
              pvalue = request.getParameter(name);
              System.out.println("  " + name + " ---- " + pvalue);
          }
          enum1 = request.getAttributeNames();
   
          // observe Request Attributes
          System.out.println("Request Attributes:");
          while (enum1.hasMoreElements()) {
              name = (String)enum1.nextElement();
              avalue = request.getAttribute(name);
              System.out.println("  " + name + " ---- " + avalue);
              
              // observe OgnlValueStack bind by Struts 2
              if (avalue instanceof OgnlValueStack) {
                  avalue = (OgnlValueStack)avalue;
                  Map<String,Object> m = ((OgnlValueStack) avalue).getContext();
                  System.out.println("  >> OgnlValueStack:");
                  Iterator it = m.keySet().iterator();
                  Object key;
                  while (it.hasNext()) {
                      key = it.next();
                      System.out.println ("        " + key + " ---- " + m.get(key));
                  }
              }
          }


给你一段检查接受内容的代码。看FILE类型的数据被放在哪个地方。不过这个是基于struts2,需要自己改一下才可以使用。或者你不用我这段代码。自己在代码里面获取一个request 然后断点查看request里面的内容