Как конвертировать составной файл в файл?



может ли кто-нибудь сказать мне, что это лучший способ конвертировать составной файл (org.springframework.сеть.составной.MultipartFile) в файл (java. io. File)?



в моем весеннем веб-проекте mvc я получаю загруженный файл как составной файл.Я должен преобразовать его в файл (io), поэтому я могу вызвать эту службу хранения изображений(Cloudinary).Они только принимают тип (файл).



Я сделал так много поисков, но не удалось.Если кто-нибудь знает хороший стандартный способ, пожалуйста, позвольте мне знаешь?
Спасибо!

844   6  

6 ответов:

вы можете получить контент multipartFile С помощью getBytes способ и вы можете создать экземпляр File класс с помощью FileOutputStream класса.

public File convert(MultipartFile file)
{    
    File convFile = new File(file.getOriginalFilename());
    convFile.createNewFile(); 
    FileOutputStream fos = new FileOutputStream(convFile); 
    fos.write(file.getBytes());
    fos.close(); 
    return convFile;
}

вы также можете использовать метод переноса:

public File multipartToFile(MultipartFile multipart) throws IllegalStateException, IOException 
{
    File convFile = new File( multipart.getOriginalFilename());
    multipart.transferTo(convFile);
    return convFile;
}

хотя принятый ответ правильный, но если вы просто пытаетесь загрузить свое изображение в cloudinary, есть лучший способ:

Map upload = cloudinary.uploader().upload(multipartFile.getBytes(), ObjectUtils.emptyMap());

где multipartFile-это ваш орг.springframework.сеть.составной.MultipartFile.

вы также можете использовать Apache Commons IO библиотеки и класс FileUtils. В случае, если вы используете maven вы можете загрузить его с помощью вышеуказанной зависимости.

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

источник для сохранения многопартийного файла на диск.

File file = new File(directory, filename);

// Create the file using the touch method of the FileUtils class.
// FileUtils.touch(file);

// Write bytes from the multipart file to disk.
FileUtils.writeByteArrayToFile(file, multipartFile.getBytes());

небольшая поправка на пост @ Petrosstsialiamanis , new File( multipart.getOriginalFilename()) это создаст файл в расположении сервера, где когда-нибудь вы столкнетесь с проблемами разрешения на запись для пользователя, его не всегда можно дать разрешение на запись для каждого пользователя, который выполняет действие. System.getProperty("java.io.tmpdir") создаст временный каталог, где ваш файл будет создан правильно. Таким образом, вы создаете папку temp, где создается файл, позже вы можете удалить файл или temp папка.

public  static File multipartToFile(MultipartFile multipart, String fileName) throws IllegalStateException, IOException {
    File convFile = new File(System.getProperty("java.io.tmpdir")+"/"+fileName);
    multipart.transferTo(convFile);
    return convFile;
}

поместите этот метод в общую утилиту ur и используйте его, например, например. Utility.multipartToFile(...)

ответ Alex78191 работал для меня.

public File getTempFile(MultipartFile multipartFile)
{

CommonsMultipartFile commonsMultipartFile = (CommonsMultipartFile) multipartFile;
FileItem fileItem = commonsMultipartFile.getFileItem();
DiskFileItem diskFileItem = (DiskFileItem) fileItem;
String absPath = diskFileItem.getStoreLocation().getAbsolutePath();
File file = new File(absPath);

//trick to implicitly save on disk small files (<10240 bytes by default)

if (!file.exists()) {
    file.createNewFile();
    multipartFile.transferTo(file);
}

return file;
}

для загрузки файлов размером более 10240 байт, пожалуйста, измените maxInMemorySize в multipartResolver на 1 МБ.

<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- setting maximum upload size t 20MB -->
<property name="maxUploadSize" value="20971520" />
<!-- max size of file in memory (in bytes) -->
<property name="maxInMemorySize" value="1048576" />
<!-- 1MB --> </bean>

вы можете получить доступ к tempfile весной путем литья, если класс интерфейса MultipartFile и CommonsMultipartFile.

public File getTempFile(MultipartFile multipartFile)
{
    CommonsMultipartFile commonsMultipartFile = (CommonsMultipartFile) multipartFile;
    FileItem fileItem = commonsMultipartFile.getFileItem();
    DiskFileItem diskFileItem = (DiskFileItem) fileItem;
    String absPath = diskFileItem.getStoreLocation().getAbsolutePath();
    File file = new File(absPath);

    //trick to implicitly save on disk small files (<10240 bytes by default)
    if (!file.exists()) {
        file.createNewFile();
        multipartFile.transferTo(file);
    }

    return file;
}

чтобы избавиться от трюка с файлами менее 10240 байт maxInMemorySize свойство может быть установлено в 0 в @Configuration@EnableWebMvc класса. После этого все загруженные файлы будут сохранены на диске.

@Bean(name = "multipartResolver")
    public CommonsMultipartResolver createMultipartResolver() {
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        resolver.setDefaultEncoding("utf-8");
        resolver.setMaxInMemorySize(0);
        return resolver;
    }

Comments

    Ничего не найдено.