Gibt es eine Möglichkeit, ein File-Objekt in MultiPartFile zu konvertieren? Damit ich dieses Objekt an Methoden senden kann, die die Objekte von akzeptieren MultiPartFile Schnittstelle?
File myFile = new File("/path/to/the/file.txt")
MultiPartFile ....?
def (MultiPartFile file) {
def is = new BufferedInputStream(file.getInputStream())
//do something interesting with the stream
}
Sie sollten in der Lage sein, Ihre eigene Klasse zu schreiben, die implementiert FileItem aber das dauert eine tatsächliche File zu delegieren, dann übergeben Sie diese FileItem Instanz an den Konstruktor von CommonsMultipartFile die implementiert MultiPartFile
– tim_yates
20. Mai 2013 um 11:38 Uhr
Ich habe eine Klasse erstellt, die FileItem implementiert, aber ich weiß nicht, wie ich alle Methoden dieser Schnittstelle implementieren soll. Ich habe eine Variable in dieser Klasse erstellt, die ist File myFile. Soll ich einfach umsetzen getinputStream() und getOutputStream()?
– vogelartig
20. Mai 2013 um 22:06 Uhr
Insbesondere weiß ich nicht, was Sie damit meinen, “aber das erfordert eine tatsächliche Datei zum Delegieren”. Das habe ich bisher: gist.github.com/birdy101/5616009
– vogelartig
20. Mai 2013 um 22:07 Uhr
Etwas wie das. Nicht getestet, aber wie Sie für Methoden sehen können, wo es möglich ist, rufe ich Methoden auf der auf artifact. Damit solltest du es konstruieren können new StoredFile( artifact: new File( '/path/to/file' ) )… Daumen drücken, es funktioniert …
– tim_yates
22. Mai 2013 um 8:55 Uhr
Arun
MockMultipartFile existiert für diesen Zweck. Wie in Ihrem Snippet funktioniert der folgende Code für mich, wenn der Dateipfad bekannt ist.
Ist es möglich, dies zu tun, ohne die Datei auf der Festplatte zu speichern?
– Tischa
16. Dezember 2016 um 9:20 Uhr
@Tisha siehe meine Lösung dafür
– ihebiheb
10. April 2019 um 16:00 Uhr
MockMultipartFile ist eine Klasse aus Spring Test. Ist es in Ordnung, Test in Prod einzuschließen?
– Azamat Almukhametov
13. September 2021 um 8:45 Uhr
Antwort auf die Frage von @Azamat Almukhametov: niemals 🙂
– Pixel
10. August um 12:17 Uhr
Anop George
File file = new File("src/test/resources/input.txt");
FileInputStream input = new FileInputStream(file);
MultipartFile multipartFile = new MockMultipartFile("file",
file.getName(), "text/plain", IOUtils.toByteArray(input));
Benutzer8840900
MultipartFile multipartFile = new MockMultipartFile("test.xlsx", new FileInputStream(new File("/home/admin/test.xlsx")));
Dieser Code funktioniert gut für mich. Vielleicht können Sie es versuchen.
user8840900 Ich kann MockMultipartFile nicht importieren. Können Sie bitte vorschlagen?
– Benutzer_531
12. Januar 2019 um 15:39 Uhr
Es ist import org.springframework.mock.web.MockMultipartFile;
– javaguy
14. Juli 2019 um 15:41 Uhr
Anfängerlösung, importieren Sie keine Test- und Mocking-Frameworks in den Haupt-/Prod-Klassenpfad! Du wirst es später bereuen. Überprüfen Sie die Antwort von @Georgios Syngouroglou auf eine bessere Lösung.
– Pixel
10. August um 12:20 Uhr
Konvertieren Sie MultipartFile in fileReader
– blauer Himmel
12. August um 20:45 Uhr
Georgios Syngouroglou
In meinem Fall die
fileItem.getOutputStream();
funktionierte nicht. Also ich habe es mir selber gemacht IOUtils,
File file = new File("/path/to/file");
FileItem fileItem = new DiskFileItem("mainFile", Files.probeContentType(file.toPath()), false, file.getName(), (int) file.length(), file.getParentFile());
try {
InputStream input = new FileInputStream(file);
OutputStream os = fileItem.getOutputStream();
IOUtils.copy(input, os);
// Or faster..
// IOUtils.copy(new FileInputStream(file), fileItem.getOutputStream());
} catch (IOException ex) {
// do something.
}
MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
Dies ist eine Lösung, ohne manuell eine Datei auf der Disc zu erstellen:
MultipartFile fichier = new MockMultipartFile("fileThatDoesNotExists.txt",
"fileThatDoesNotExists.txt",
"text/plain",
"This is a dummy file content".getBytes(StandardCharsets.UTF_8));
Hallo, ich versuche dies, aber mit der Erweiterung .xlsx und contentType = “application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”. Bei mir funktioniert es nicht, bitte um Hilfe?
– Rubydio
22. September 2020 um 11:34 Uhr
Entschuldigung, ich habe es nicht mit Excel-Dateien versucht. Ich habe keine Idee, wie ich das machen soll. Vielleicht solltest du dafür einen anderen Thread aufmachen
– ihebiheb
22. September 2020 um 12:54 Uhr
Lösung ohne Mocking-Klasse, nur Java9+ und Spring.
FileItem fileItem = new DiskFileItemFactory().createItem("file",
Files.probeContentType(file.toPath()), false, file.getName());
try (InputStream in = new FileInputStream(file); OutputStream out = fileItem.getOutputStream()) {
in.transferTo(out);
} catch (Exception e) {
throw new IllegalArgumentException("Invalid file: " + e, e);
}
CommonsMultipartFile multipartFile = new CommonsMultipartFile(fileItem);
Hallo, ich versuche dies, aber mit der Erweiterung .xlsx und contentType = “application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”. Bei mir funktioniert es nicht, bitte um Hilfe?
– Rubydio
22. September 2020 um 11:34 Uhr
Entschuldigung, ich habe es nicht mit Excel-Dateien versucht. Ich habe keine Idee, wie ich das machen soll. Vielleicht solltest du dafür einen anderen Thread aufmachen
– ihebiheb
22. September 2020 um 12:54 Uhr
gtiwari333
File file = new File("src/test/resources/validation.txt");
DiskFileItem fileItem = new DiskFileItem("file", "text/plain", false, file.getName(), (int) file.length() , file.getParentFile());
fileItem.getOutputStream();
MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
Sie benötigen Folgendes, um NPE zu verhindern.
fileItem.getOutputStream();
Außerdem müssen Sie den Dateiinhalt in fileItem kopieren, damit die Datei nicht leer ist
new FileInputStream(f).transferTo(item.getOutputStream());
Kopieren Sie Ihre Daten, um NPE zu reparieren: new FileInputStream(file).transferTo(fileItem.getOutputStream())
Sie sollten in der Lage sein, Ihre eigene Klasse zu schreiben, die implementiert
FileItem
aber das dauert eine tatsächlicheFile
zu delegieren, dann übergeben Sie dieseFileItem
Instanz an den Konstruktor vonCommonsMultipartFile
die implementiertMultiPartFile
– tim_yates
20. Mai 2013 um 11:38 Uhr
Ich habe eine Klasse erstellt, die FileItem implementiert, aber ich weiß nicht, wie ich alle Methoden dieser Schnittstelle implementieren soll. Ich habe eine Variable in dieser Klasse erstellt, die ist
File myFile
. Soll ich einfach umsetzengetinputStream()
undgetOutputStream()
?– vogelartig
20. Mai 2013 um 22:06 Uhr
Insbesondere weiß ich nicht, was Sie damit meinen, “aber das erfordert eine tatsächliche Datei zum Delegieren”. Das habe ich bisher: gist.github.com/birdy101/5616009
– vogelartig
20. Mai 2013 um 22:07 Uhr
Etwas wie das. Nicht getestet, aber wie Sie für Methoden sehen können, wo es möglich ist, rufe ich Methoden auf der auf
artifact
. Damit solltest du es konstruieren könnennew StoredFile( artifact: new File( '/path/to/file' ) )
… Daumen drücken, es funktioniert …– tim_yates
22. Mai 2013 um 8:55 Uhr