Загрузка файла Struts определяет правильное расширение вместо .tmp

Я новичок в Struts и работаю над загрузкой файлов с помощью Struts.

Клиент: это программа Java, которая подключается к моему приложению Strut с помощью API-интерфейса apache HttpClient и предоставляет мне файл File. Клиент по мере необходимости иногда дает мне файл .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);

на самом деле клиент написан давно и не может быть изменен, и я хочу идентифицировать что-то на стороне сервера только для того, чтобы найти расширение.

Пожалуйста, помогите, спасибо.


person Jayesh    schedule 27.07.2012    source источник
comment
это в struts2 или struts1? в struts2 при загрузке файла перехватчик загрузки файла отправляет свойство, а именно contentType, с помощью которого вы всегда можете уточнить тип файла. Всегда лучше предоставить какой-то код с вопросом   -  person Umesh Awasthi    schedule 27.07.2012
comment
В struts2 вы должны проверить contentType с типами MIME. Если его contentType равен audio/x-wav, файл будет иметь расширение .wav, а если файл application/zip, файл будет иметь расширение .zip.   -  person Pigueiras    schedule 27.07.2012


Ответы (1)


Перехватчик Struts2 File Uploader при загрузке файла передает информацию о типе контента в класс Action, и можно легко найти тип файла, сравнив contentType с типом MIME.

Если вы хотите создать карту с ключом в качестве типа контента и типом файла в качестве его значения, например

map.Add("image/bmp",".bmp", )
map.Add("image/gif",".gif", )
map.Add("image/jpeg",".jpeg", )

и может легко получить тип на основе предоставленного расширения. Надеюсь, это поможет вам.

person Umesh Awasthi    schedule 27.07.2012
comment
@ user1012372: почему бы вам не добавить тип расширения файла, используя код Java, например mPost.addParameter("fileExtension", zipFile .extension());, или вы можете использовать тот же ContentType, чтобы получить расширение файла, как описано в моем посте - person Umesh Awasthi; 27.07.2012
comment
Умеш: Клиент не под моим контролем. Пожалуйста, помогите с кодом на стороне сервера... - person Jayesh; 27.07.2012
comment
Также я попробовал этот Umesh, File[] file = multiWrapper.getFiles(inputValue); // Если он нулевой, загрузка не удалась if (file != null) { if(file[0].getContentType().equals(application/zip)) { } } но getContentType() не присутствует внутри File Class. - person Jayesh; 27.07.2012
comment
contentType предоставляется перехватчиком загрузчика файлов Struts2 в качестве свойства, вам необходимо определить свойство в своем классе действий как contentType и позволить загрузчику файлов Struts2 предоставить вам информацию о contentType - person Umesh Awasthi; 27.07.2012