Struts2 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”扩展名上传的,我想用客户端传递的相同扩展名上传它 或者我们可以通过其他方式检查客户端发送的文件的扩展名是什么 我被这个问题困住了,无法继续下

我是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信息