Utilizzo Spring Boot e devo consentire agli utenti di caricare i file per l'elaborazione. In questo momento, il file viene caricato in/home/username/git/myproject che non è eccezionale.Come si può specificare una directory temporanea per i caricamenti di file in Spring Boot?
Come faccio a rendere Spring questi caricamenti di file in una directory temporanea che verrà periodicamente eliminata dal riavvio dell'applicazione (o altri mezzi)?
Ecco cosa ho provato ... ma non funziona. Il file viene comunque salvato nella mia directory di lavoro.
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 Sto solo eseguendo la mia app eseguendo Applicazione e sta utilizzando Tomcat incorporato.
UPDATE:
Ok li ho risolto. Stavo Conversione del MultipartFile in arrivo per un normale file in questo modo:
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;
}
Invece, sarei stato la creazione di un nuovo file nella directory temporanea definita in questo modo:
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;
}
Ora si può chiedere , "Beh, che dire dell'impostazione 'multipart.location' del file application.properties?" Quella impostazione, ovvia in retrospettiva, controlla solo dove va il file multipart effimero. Se hai watch that directory with a script, vedrai che un file 'upload_.tmp' appare brevemente e poi scompare. 'multipart.location' non ha nulla a che fare con gli oggetti File persistenti che potresti creare.
(Nota, si può essere in grado di utilizzare i MultipartBean snippet dall'alto invece di application.properties, ma non l'ho provato e perché si vorrebbe?)
Per modificare il valore del tuo vero directory temp, puoi usare l'argomento "-Djava.io.tmp =/path/to/dir" VM per specificare tutto ciò che vuoi prima di avviare la tua applicazione Spring Boot.
multipart.enabled sembra essere valido. Penso di aver risolto la domanda più ampia e pubblicherò sopra. – fivedogit