Datei in MultiPartFile konvertieren

Lesezeit: 4 Minuten

Benutzer-Avatar
vogelartig

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


Benutzer-Avatar
Arun

MockMultipartFile existiert für diesen Zweck. Wie in Ihrem Snippet funktioniert der folgende Code für mich, wenn der Dateipfad bekannt ist.

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.springframework.mock.web.MockMultipartFile;

Path path = Paths.get("/path/to/the/file.txt");
String name = "file.txt";
String originalFileName = "file.txt";
String contentType = "text/plain";
byte[] content = null;
try {
    content = Files.readAllBytes(path);
} catch (final IOException e) {
}
MultipartFile result = new MockMultipartFile(name,
                     originalFileName, contentType, content);

  • 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

Benutzer-Avatar
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));

Benutzer-Avatar
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

Benutzer-Avatar
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

Benutzer-Avatar
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())

    – MariuszS

    23. Februar 2019 um 21:22 Uhr

  • Notiz, FileInputStream.transferTo() erfordert Java SDK 9.

    – tom_mai78101

    27. Juli um 19:36 Uhr

1180660cookie-checkDatei in MultiPartFile konvertieren

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy