Podążam za przykładem podanym na stronie przesyłania plików wspólnych. Utknąłem, próbując dowiedzieć się, jak uzyskać rozszerzenie pliku przesłanego pliku, jak napisać plik do katalogu, a najgorsze jest to, gdzie osoba, która napisała przykład, komentuje // Process the input stream...
. Pozostaje mi zastanawiać się, czy to jest coś tak banalnego, że Jestem jedynym, który nie wie, jak to zrobić.jak przesłać plik za pomocą przesyłania plików w pliku commons
Odpowiedz
Użyj tego w pliku HTML:
<form action="UploadController" enctype="multipart/form-data" method="post">
<input type="file">
</form>
aw UploadController
serwletu wewnątrz metody doPost
:
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List items = upload.parseRequest(request);
Iterator iterator = items.iterator();
while (iterator.hasNext()) {
FileItem item = (FileItem) iterator.next();
if (!item.isFormField()) {
String fileName = item.getName();
String root = getServletContext().getRealPath("/");
File path = new File(root + "/uploads");
if (!path.exists()) {
boolean status = path.mkdirs();
}
File uploadedFile = new File(path + "/" + fileName);
System.out.println(uploadedFile.getAbsolutePath());
item.write(uploadedFile);
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
'boolean isMultipart = ServletFileUpload.isMultipartContent (request); ServletFileUpload upload = nowy ServletFileUpload(); FileItemIterator iter = upload.getItemIterator (żądanie); while (iter.hasNext()) { FileItemStream item = iter.next(); Nazwa ciągu = item.getFieldName(); Strumień InputStream = item.openStream(); if (item.isFormField()) { } else {// Przetwarzanie strumień wejściowy ... } } ' – qualebs
więc przepraszam za słabą formatowania kodu. Jestem na urządzeniu mobilnym. jak przetworzyć strumień z powyższego fragmentu? – qualebs
Czy jesteś pewien, że używasz strumieniowego API 'FileItem item = (FileItem) iterator.next();'? Myślę, że powinno to być 'FileItemStream item = iterator.next();' dzięki czemu można korzystać z przesyłania strumieniowego. – Don
Oto aplet, który robi to, co chcesz to zrobić.
package rick;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.util.*;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.annotation.WebServlet;
@WebServlet("/upload4")
public class UploadServlet4 extends HttpServlet{
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.print("Request content length is " + request.getContentLength() + "<br/>");
out.print("Request content type is " + request.getHeader("Content-Type") + "<br/>");
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(isMultipart){
ServletFileUpload upload = new ServletFileUpload();
try{
FileItemIterator iter = upload.getItemIterator(request);
FileItemStream item = null;
String name = "";
InputStream stream = null;
while (iter.hasNext()){
item = iter.next();
name = item.getFieldName();
stream = item.openStream();
if(item.isFormField()){out.write("Form field " + name + ": "
+ Streams.asString(stream) + "<br/>");}
else {
name = item.getName();
System.out.println("name==" + name);
if(name != null && !"".equals(name)){
String fileName = new File(item.getName()).getName();
out.write("Client file: " + item.getName() + " <br/>with file name "
+ fileName + " was uploaded.<br/>");
File file = new File(getServletContext().getRealPath("/" + fileName));
FileOutputStream fos = new FileOutputStream(file);
long fileSize = Streams.copy(stream, fos, true);
out.write("Size was " + fileSize + " bytes <br/>");
out.write("File Path is " + file.getPath() + "<br/>");
}
}
}
} catch(FileUploadException fue) {out.write("fue!!!!!!!!!");}
}
}
}
Jest fantastyczna "biblioteka", która zrobi to za Ciebie. W rzeczywistości jest to tylko przykładowy kod filtru, który przechwyci dowolne posty z posta typu multipart i da ci dostęp do pliku, nazwy pliku itp ..., którą możesz obsłużyć w swojej normalnej metodzie postletu serwletu.
Problem z wszystkich tych odpowiedzi jest to, że nie odpowiada na pierwotne pytanie !!
Jak mówi "przetwarzanie strumienia wejściowego", naprawdę myli cię, co dalej. Przez całą noc patrzyłem na to pytanie, próbując znaleźć wskazówkę na podstawie jednej z odpowiedzi, ale nic. Poszedłem i wypróbowałem inne strony i nic.
Chodzi o to, że to, co robimy, wykracza poza zakres przesyłania pliku i to jest problem.
Obecnie pracujemy z java.io InputStream
InputStream stream = item.openStream();
teraz pracujemy z tym "strumieniem".
Tutaj można znaleźć wszystkie rodzaje odpowiedzi na to, co trzeba. To dość głupie, że jest tak niejasne i wydaje się, że musisz zrobić coś dodatkowego w Commons, ale w rzeczywistości to nie jest commons InputStream to Java.io!
W naszym przypadku bierzemy strumień nam dane i przesłać do nowego pliku, czytając bajt danych
Ta strona ma również kilka opcji, które mogą być przydatne http://www.jedi.be/blog/2009/04/10/java-servlets-and-large-large-file-uploads-enter-apache-fileupload/
Mam nadzieję, że to pomoże innym którzy są zdezorientowani i nowi w FileUploading, ponieważ właśnie to wymyśliłem kilka minut przed napisaniem tej odpowiedzi.
Oto mój kod, który zapisuje plik na dysku root.
try {
System.out.println("sdfk");
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload();
// Parse the request
FileItemIterator iter = upload.getItemIterator(request);
while (iter.hasNext())
{
FileItemStream item = iter.next();
String name = item.getFieldName();
InputStream stream = item.openStream();
System.out.println("File field " + name + " with file name "
+ item.getName() + " detected.");
// Process the input stream
File f = new File("/"+item.getName());
System.out.println(f.getAbsolutePath());
FileOutputStream fout= new FileOutputStream(f);
BufferedOutputStream bout= new BufferedOutputStream (fout);
BufferedInputStream bin= new BufferedInputStream(stream);
int byte_;
while ((byte_=bin.read()) != -1)
{
bout.write(byte_);
}
bout.close();
bin.close();
}
}
catch (FileUploadException ex)
{
Logger.getLogger(UploadServlet.class.getName()).log(Level.SEVERE, null, ex);
}
response.sendRedirect("/plans.jsp");
Powodzenia!
Podałem tutaj http://www.javamonamour.org/2015/10/web-application-for-file-upload-with.html kompletny przykład pracy (projekt Eclipse dla WebLogic, ale można go łatwo dostosować do Tomcat).
W przeciwnym razie po prostu git clone https://github.com/vernetto/WebFileUploaderStreaming. Pełen działający przykład jest lepszy niż tysiąc fragmentów kodu.
- 1. Jak przesłać plik do wordpress za pomocą niestandardowego formularza przesyłania?
- 2. Jak przesłać wiele plików za pomocą jednego przycisku przesyłania
- 3. Jak przesłać wiele plików za pomocą AFNetworking
- 4. Jak przesłać plik za pomocą Mojolicious?
- 5. jak mogę przesłać plik za pomocą PHP
- 6. Jak rozpakować plik TAR za pomocą Apache Commons
- 7. iPhone przesłać wieloczęściowy plik za pomocą AFNetworking
- 8. Przesyłanie wielu plików do różnych adresów URL za pomocą przesyłania plików za pomocą narzędzia ng2
- 9. Jak przesłać plik w Angular2
- 10. Błąd przesyłania pliku za pomocą QNetworkAccessManager
- 11. Obsługa przesyłania plików za pomocą serwera autonomicznego Selenium
- 12. Serwer przesyłania plików/klient za pomocą gniazda
- 13. Jak przesłać .docx za pomocą Codeigniter? (PHP)
- 14. Jak wybrać wiele plików za pomocą Kontroli przesyłania plików?
- 15. Jak przesłać wiele plików w tym samym czasie do plików w chmurze za pomocą Pythona?
- 16. Nie można przesłać pliku za pomocą php
- 17. Jak ograniczyć rozmiar pliku podczas przesyłania za pomocą multer?
- 18. Jak przesłać plik audio do przesyłania strumieniowego z Grails za pomocą kodu 206?
- 19. Jak sprawdzić poprawność pola przesyłania plików za pomocą Javascript/jquery
- 20. Jak odróżnić plik od folderu podczas przesyłania za pomocą przeciągania i upuszczania w jquery?
- 21. Jak przesłać plik do witryny SharePoint za pomocą skryptu pythonowego
- 22. Jak przesłać plik za pomocą Selenium WebDriver w Javie
- 23. jak przesłać plik za pomocą curl z php
- 24. Jak przesłać plik w formularzach okien?
- 25. Przenieść surowy plik binarny za pomocą apache commons-net FTPClient?
- 26. Jak przesłać wiele plików za pomocą Zend Framework?
- 27. django przesłać dwie różne formy za pomocą jednego przycisku przesyłania
- 28. Jak przesłać plik/obraz za pomocą funkcji tastypie
- 29. Jak przesłać plik do katalogu docelowego za pomocą curl?
- 30. "Długość zawartości zbyt długa" podczas przesyłania pliku za pomocą Tornado
Istnieje ogromna ilość informacji, jak to zrobić tutaj: [link] (http://commons.apache.org/proper/commons-fileupload/using.html). – Sticks