日期:2014-05-18  浏览次数:20667 次

JSP里怎么使用上传控件
我在JSP里使用了文件上传控件,
<form     method= "post "   action= "servlet1 "   >
.....
<input   type= "file "   name= "filepath "   />
</form>
因为只是练习,只要把上传文件的路径输出就可以了,可是在Servlet里用
String   file   =   request.getParameter( "filepath ");
out.println(file);

可结果输出了空,为什么会这样呢,请高手指点!

------解决方案--------------------
好像是出于安全考虑 那个字段本来就对服务器端不可见吧

你要想得到 可以用
<%@ page contentType= "text/html;charset=GB2312 " %>
<%@ page language= "java " import= "com.jspsmart.upload.* "%>
<jsp:useBean id= "mySmartUpload " scope= "page " class= "com.jspsmart.upload.SmartUpload " />

<HTML>
<BODY BGCOLOR= "white ">

<H1> jspSmartUpload : Sample 2 </H1>
<HR>

<%


// 声明变量count,用来存储上传文件个数
int count=0;

// 执行初始化操作
mySmartUpload.initialize(pageContext);

// 上传文件到服务器
mySmartUpload.upload();

// 对上传到服务器的文件进行逐个处理
for (int i=0;i <mySmartUpload.getFiles().getCount();i++){

// 取出一个文件
com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(i);

// 只有myFile代表的文件存在时才执行存储操作
if (!myFile.isMissing()) {

// 保存该文件到web应用程序下的upload目录
myFile.saveAs( "/upload/ " + myFile.getFileName());


// 显示当前文件信息
out.println( "FieldName = " + myFile.getFieldName() + " <BR> ");
out.println( "Size = " + myFile.getSize() + " <BR> ");
out.println( "FileName = " + myFile.getFileName() + " <BR> ");
out.println( "FileExt = " + myFile.getFileExt() + " <BR> ");
out.println( "FilePathName = " + myFile.getFilePathName() + " <BR> ");
out.println( "ContentType = " + myFile.getContentType() + " <BR> ");
out.println( "ContentDisp = " + myFile.getContentDisp() + " <BR> ");
out.println( "TypeMIME = " + myFile.getTypeMIME() + " <BR> ");
out.println( "SubTypeMIME = " + myFile.getSubTypeMIME() + " <BR> ");

count ++;

}

}

// Display the number of files which could be uploaded
out.println( " <BR> " + mySmartUpload.getFiles().getCount() + " files could be uploaded. <BR> ");

// Display the number of files uploaded
out.println(count + " file(s) uploaded. ");


%>
</BODY>
</HTML>

------解决方案--------------------
<FORM name= "frm " METHOD= "POST " ACTION= "Servlet1 " ENCTYPE= "multipart/form-data ">
<input type= "file " name= "filepath " />
</FORM>

注意 ENCTYPE 属性,它有三个取值;
如果你想实现上传,那么就像我这么写它的值;
如果你只想像你提出的方式打印它的路径,那么就不用写这个属性了。

------解决方案--------------------
首先,servlet没有提供标准api来读取上载的文件,用getParameter()这样做是不行的。要读取上载文件的话,在servlet api中只能用request.getInputStream。这样就要自己来对整个请求进行分析。
  还有另一个办法,就是使用第三方的开源工具。楼上说的那个我没用过。我自己用的是apache的jakarta项目的commons里的fileupload。他里面包括读取、存储、获得相关信息(如:文件名)等等的api。网址如下,里面还有用户手册和简单实例。
http://jakarta.apache.org/commons/fileupload/