Używam Spring Boot i muszę umożliwić użytkownikom przesyłanie plików do przetworzenia. W tej chwili plik ładuje się do/home/username/git/myproject, co nie jest świetne.W jaki sposób określić katalog tymczasowy do przesyłania plików w Spring Boot?
W jaki sposób sprawić, aby Spring przesłała te pliki do katalogu tymczasowego, który będzie okresowo czyszczony przez restart aplikacji (lub w inny sposób)?
Oto, co próbowałem ... ale to nie działa. Plik nadal zapisuje się w moim katalogu roboczym.
public class Application implements CommandLineRunner {
/*
* This doesn't seem to work.
*/
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setMaxFileSize("128KB");
factory.setMaxRequestSize("128KB");
factory.setLocation(System.getProperty("java.io.tmpdir"));
return factory.createMultipartConfig();
}
/* other stuff, main(), etc */
}
PS Po prostu uruchomię swoją aplikację, uruchamiając Aplikację i korzysta z wbudowanego Tomcat.
UPDATE:
Ok mam to załatwić. Byłem przekształcania przychodzącego MultipartFile do normalnego pliku tak:
private File convertMultipartFileToFile(MultipartFile file) throws IOException
{
File convFile = new File(file.getOriginalFilename());
convFile.createNewFile();
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
return convFile;
}
Zamiast tego powinny zostać tworzenia nowego pliku w wyznaczonym katalogu tymczasowego takiego:
private File convertMultipartFileToFile(MultipartFile file) throws IOException
{
File convFile = File.createTempFile("temp", ".xlsx"); // choose your own extension I guess? Filename accessible with convFile.getAbsolutePath()
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
return convFile;
}
Teraz można się z prośbą , "A co z ustawieniem" multipart.location "pliku application.properties?" To ustawienie, oczywiste z perspektywy czasu, steruje tylko tam, gdzie idzie efemeryczny plik wieloczęściowy. Jeśli wyświetli się watch that directory with a script, pojawi się krótko plik "upload_.tmp", a następnie znika. "multipart.location" nie ma nic wspólnego z trwałymi obiektami File, które możesz utworzyć.
(uwaga, może być w stanie korzystać z MultipartBean snippet z góry zamiast application.properties, ale nie spróbować i dlaczego chcesz?)
Aby zmienić wartość twoja prawdziwa katalog tymczasowy, możesz użyć argumentu "VM" -Djava.io.tmp =/path/to/dir, aby określić, co chcesz, przed uruchomieniem aplikacji Spring Boot.
multipart.enabled wydaje się być nieprawidłowy. Myślę, że mam jednak większe pytanie, które rozwiązałem i zamieszczę powyżej. – fivedogit