Получение фактического типа файла с помощью Struts2 s: управление файлом - PullRequest
0 голосов
/ 23 декабря 2011

Я использую Struts2 File control s: file.

JSP-код

<s:file name="user.batchFile" />

Код класса действия

new MimetypesFileTypeMap().getContentType(getUser().getBatchFile());

Возвращает поток приложений / октетов.

Я загружаю файл CSV.Есть ли какой-нибудь способ, которым я могу получить текст / CSV.Я хочу проверить файл, этот пользователь должен только загрузить фактический файл.Не какой-то другой системный файл.Или не изменив его ext на csv.

Как я могу получить фактический тип файла?

Ответы [ 2 ]

2 голосов
/ 23 декабря 2011

Я считаю, что вам нужно определить следующие методы мутатора

 private File file;
 private String contentType;
 private String filename;

 public void setUpload(File file) {
         this.file = file;
      }

      public void setUploadContentType(String contentType) {
         this.contentType = contentType;
      }

      public void setUploadFileName(String filename) {
         this.filename = filename;
      }

Где

setX(File file) : The file that contains the content of the uploaded file setXContentType(String contentType) : The mime type of the uploaded file setXFileName(String fileName) :Actual file name

Пожалуйста, ознакомьтесь с официальной документацией для деталей

файл-загрузки

как-ду-мы-загрузки-файлов

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

<action name="doUpload" class="com.example.UploadAction">
    <interceptor-ref name="basicStack"/>
    <interceptor-ref name="fileUpload">
        <param name="allowedTypes">image/jpeg,image/gif</param>
    </interceptor-ref> 
    <result name="success">good_result.jsp</result>
</action>

Но программное ограничение типа файла с использованием информации, передаваемой вашему классу Action с помощью метода setXContentType(String contentType), значительно более гибкое, чем это

0 голосов
/ 23 декабря 2011

Вы не должны использовать javax.activation.MimetypesFileTypeMap mime mapping.Вместо этого вы должны получить тип пантомимы на ServletContext#getMimeType().Он использует <mime-mapping> записей web.xml, которые вы можете настроить / переопределить.Например, в Tomcat список по умолчанию определен в /conf/web.xml.Вы можете добавить его там или в собственном веб-приложении web.xml следующим образом:

<mime-mapping>
    <extension>csv</extension>
    <mime-type>text/csv</mime-type>
</mime-mapping>

Затем вы можете получить его следующим образом:

String contentType = ServletActionContext.getServletContext().getMimeType(fileName);
// ...

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

...