Struts2 Struts文件上传识别正确的扩展名而不是.tmp
我是Struts新手,正在使用Struts进行文件上传 客户: 这是一个Java程序,它使用ApacheHttpClient API访问我的Strut应用程序,并为我提供 文件 客户根据需要有时给我.wav文件和.zip文件,有时两者都给 服务器: Struts应用程序从客户端应用程序获取请求并上载文件 在这里,当我上传文件时出现了问题,它是使用“.tmp”扩展名上传的,我想用客户端传递的相同扩展名上传它 或者我们可以通过其他方式检查客户端发送的文件的扩展名是什么 我被这个问题困住了,无法继续下去 请查找随附的代码,并告诉我需要做哪些修改: 服务器代码:Struts2 Struts文件上传识别正确的扩展名而不是.tmp,struts2,struts-1,struts-config,struts-validation,Struts2,Struts 1,Struts Config,Struts Validation,我是Struts新手,正在使用Struts进行文件上传 客户: 这是一个Java程序,它使用ApacheHttpClient API访问我的Strut应用程序,并为我提供 文件 客户根据需要有时给我.wav文件和.zip文件,有时两者都给 服务器: Struts应用程序从客户端应用程序获取请求并上载文件 在这里,当我上传文件时出现了问题,它是使用“.tmp”扩展名上传的,我想用客户端传递的相同扩展名上传它 或者我们可以通过其他方式检查客户端发送的文件的扩展名是什么 我被这个问题困住了,无法继续下
MultiPartRequestWrapper multiWrapper=null;
File baseFile=null;
System.out.println("inside do post");
multiWrapper = ((MultiPartRequestWrapper)request);
Enumeration e = multiWrapper.getFileParameterNames();
while (e.hasMoreElements()) {
// get the value of this input tag
String inputValue = (String) e.nextElement();
// Get a File object for the uploaded File
File[] file = multiWrapper.getFiles(inputValue);
// If it's null the upload failed
if (file != null) {
FileInputStream fis=new FileInputStream(file[0]);
System.out.println(file[0].getAbsolutePath());
System.out.println(fis);
int ch;
while((ch=fis.read())!=-1){
System.out.print((char)ch);
}
}
}
System.out.println("III :"+multiWrapper.getParameter("method"));
客户端代码:
HttpClient client = new HttpClient();
MultipartPostMethod mPost = new MultipartPostMethod(url);
File zipFile = new File("D:\\a.zip");
File wavFile = new File("D:\\b.wav");
mPost.addParameter("recipientFile", zipFile);
mPost.addParameter("promptFile", wavFile);
mPost.addParameter("method", "addCampaign");
statusCode1 = client.executeMethod(mPost);
事实上,客户端写得很长,无法修改,我想在服务器端识别一些东西,只为了找到扩展
请提供帮助,谢谢。Struts2文件上传器拦截器在上传文件时将内容类型信息传递给Action类,通过比较contentType和MIME类型可以轻松找到文件类型 如果需要,可以创建一个映射,其中key作为内容类型,file type作为其值,如
map.Add("image/bmp",".bmp", )
map.Add("image/gif",".gif", )
map.Add("image/jpeg",".jpeg", )
并且可以根据提供的扩展轻松获取类型。希望这对您有所帮助。是在struts2还是struts1中?在struts2中,上载文件时,文件上载拦截器会发送一个属性,即
contentType
,通过该属性,您可以随时确定文件类型。在struts2中,最好为问题提供某种类型的代码,您必须用MIME类型检查contentType。如果其内容类型是audio/x-wav
文件将具有.wav
扩展名,如果文件是application/zip
文件将具有.zip
扩展名。@user1012372:为什么不使用类似mPost.addParameter(“fileExtension”,zipFile.extension())的java代码添加文件扩展名类型代码>或者您可以使用相同的ContentType来获取文件扩展名,如my PositeMesh中所述:客户端不在我的控制之下。请在服务器端代码上提供帮助…我也尝试了这个Umesh,File[]File=multiWrapper.getFiles(inputValue);//如果为null,则上载失败,如果(file!=null){If(file[0].getContentType().equals(“application/zip”)){},但getContentType()不在文件类中。contentType由Struts2文件上载程序拦截器作为属性提供,您需要在action类中将属性定义为contentType,并让Struts2文件上载程序为您提供contentType信息