The @MultiPartConfig jest naprawdę tylko interfejs markerem pojemnika. Po zainicjowaniu serwletu podane wartości adnotacji są mapowane do niego za pomocą obiektu proxy. Gdy żądanie przychodzące jest wieloczęściowe/dane formularza, części wysyłania są odwzorowywane na żądanie, a kontener wykonuje niezbędne prace na podstawie wartości z adnotacji i części na żądanie. Nie ma sposobu, aby przechwycić ten proces, ponieważ wszystko dzieje się w głębi pojemnika. Istnieje jednak jedna alternatywa. Wymaga to wykonania operacji systemu plików po raz drugi. Ponieważ masz wszystkie części, możesz zrekonstruować plik i "przesłać" go do wybranej lokalizacji. Może wyglądać jak poniższa metoda. Należy pamiętać, chociaż ja testowałem to szybko w serwletu mojego własnego wykazać pojęcie to nie jest oczywiście zakończył Kod:
@Override
protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
throws ServletException, IOException {
httpServletResponse.setContentType("text/html");
PrintWriter printWriter = httpServletResponse.getWriter();
InputStream inputStream;
FileOutputStream fileOutputStream;
for (Part part : httpServletRequest.getParts()) {
inputStream = httpServletRequest.getPart(part.getName()).getInputStream();
int i = inputStream.available();
byte[] b = new byte[i];
inputStream.read(b);
String fileName = "";
for (String temp : part.getHeader("content-disposition").split(";")) {
if (temp.trim().startsWith("filename")) {
fileName = temp.substring(temp.indexOf('=') + 1).trim().replace("\"", "");
}
}
String uploadDir = "/temp";
fileOutputStream = new FileOutputStream(uploadDir + "/" + fileName);
fileOutputStream.write(b);
inputStream.close();
fileOutputStream.close();
printWriter.write("Uploaded file " + uploadDir + "/" + fileName + ".");
}
}
Jeśli używasz @MultiPartConfig i potrzebują lokalizację pliku wykonawczego następnie nie masz innej możliwości niż "ponowne przesłanie" części. –