Sto seguendo l'esempio fornito nel sito di caricamento di file comuni su API di streaming. Sono bloccato cercando di capire come ottenere l'estensione del file caricato, come scrivere il file in una directory e la parte peggiore è dove la persona che ha scritto l'esempio commenta // Process the input stream...
Mi chiedo se sia qualcosa di così banale che Sono l'unico che non sa come.come caricare un file utilizzando il flusso di file comuni streaming api
risposta
Utilizzare questo nel file HTML:
<form action="UploadController" enctype="multipart/form-data" method="post">
<input type="file">
</form>
e nel UploadController
servlet, all'interno del metodo 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();
}
}
'booleano isMultipart = ServletFileUpload.isMultipartContent (richiesta); ServletFileUpload upload = new ServletFileUpload(); FileItemIterator iter = upload.getItemIterator (richiesta); while (iter.hasNext()) { Item FileItemStream = iter.next(); Nome stringa = item.getFieldName(); InputStream stream = item.openStream(); se (item.isFormField()) { } else {// elaborare il flusso di input ... }} ' – qualebs
così dispiaciuto per la formattazione del codice poveri. Sono sul dispositivo mobile. ora come si elabora lo stream dallo snippet sopra? – qualebs
Sei sicuro di utilizzare l'API di streaming 'FileItem item = (FileItem) iterator.next();'? Penso che dovrebbe essere 'FileItemStream item = iterator.next();' così puoi usare lo streaming. – Don
Ecco una servlet che fa quello che si vuole fare.
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!!!!!!!!!");}
}
}
}
C'è una fantastica "biblioteca" per fare questo per voi. In realtà è solo un esempio di codice di un filtro che intercetterà tutti i messaggi di tipo multiparte e ti darà accesso al file, al nome del file ecc ... che puoi gestire nel normale metodo del servlet post.
Il problema di tutte queste risposte è che non risponde alla domanda originale !!
Come dice "elaborare il flusso di input" in realtà ti confonde cosa fare dopo. Stavo guardando questa domanda tutta la notte scorsa cercando di trovare un suggerimento da una delle risposte, ma niente. Sono andato a provare altri siti e niente.
Il fatto è che ciò che stiamo facendo è fuori dall'ambito di caricamento del file, e questo è il problema.
Ora stiamo lavorando con Java.IO InputStream
InputStream stream = item.openStream();
ora lavoriamo con quel "flusso".
Qui si possono trovare tutti i tipi di risposte a quello che vi serve. È piuttosto sciocco che sia così vago, e sembra che tu debba fare qualcosa in più con i Commons, ma in realtà non è un bene comune. InputStream è Java.io!
Nel nostro caso prendiamo il torrente c'è dato e carichiamo in un nuovo file con la lettura di dati byte
Questo sito ha anche una serie di opzioni che potrebbero essere utili http://www.jedi.be/blog/2009/04/10/java-servlets-and-large-large-file-uploads-enter-apache-fileupload/
Spero che questo aiuta gli altri chi è confuso e nuovo a FileUploading, perché ho appena capito questo alcuni minuti prima di scrivere questa risposta.
Ecco il mio codice che salva un file nell'unità principale.
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");
Buona fortuna!
Ho dato qui http://www.javamonamour.org/2015/10/web-application-for-file-upload-with.html un esempio operativo completo (un progetto Eclipse per WebLogic, ma è possibile adattarlo facilmente a Tomcat).
Altrimenti git clone solo https://github.com/vernetto/WebFileUploaderStreaming. Un esempio di lavoro completo è migliore di un migliaio di frammenti di codice.
- 1. File di flusso come RTSP utilizzando VLC
- 2. come posso caricare un file utilizzando PHP
- 3. Come eseguire lo streaming di un file multimediale utilizzando PHP?
- 4. Come caricare file usando loopback api explorer?
- 5. Come ottenere un flusso FILE * da un descrittore di file?
- 6. È possibile utilizzare cURL per caricare in streaming un file utilizzando il POST?
- 7. caricare il file con FTP utilizzando nant
- 8. Come caricare file in blocchi in ASP.NET utilizzando ng-Flow
- 9. Streaming di file Avi da C# utilizzando RTP
- 10. decodificare un flusso di file utilizzando UTF-8
- 11. come caricare file utilizzando curl con php
- 12. utilizzando sqlalchemy per caricare il file csv in un database
- 13. Streaming di file remoti in oggetti file
- 14. Come caricare un file utilizzando AngularJs come nel modo tradizionale
- 15. Come caricare un file utilizzando un client di riposo per il nodo
- 16. Cercare di eseguire lo streaming di un file PDF con asp.net sta producendo un "file danneggiato"
- 17. Come caricare il contenuto del file XML utilizzando Javascript?
- 18. Caricamento di file in streaming tramite Web API su StreamReader
- 19. Carica un file utilizzando file_get_contents
- 20. Come generare IntStream utilizzando Java API flusso
- 21. Utilizzare NodeJS caricare il file in una chiamata API
- 22. Esempio di API DropBox PUT utilizzando Curl e Oauth 2 per caricare un file su DropBox
- 23. Come caricare un altro file html utilizzando JS
- 24. Come caricare un file sul server utilizzando Yesod
- 25. Come caricare e salvare un file utilizzando framework bottiglia
- 26. Come caricare più file utilizzando un elemento di input di file
- 27. Utilizzando Compojure, Hiccup e anello di caricare un file
- 28. Come caricare il file e il modello usando l'API Web?
- 29. API PHP di Google Drive - Come eseguire lo streaming di un file di grandi dimensioni
- 30. Streaming di un file da SharpSSH
C'è un'enorme quantità di informazioni su come farlo qui: [collegamento] (http://commons.apache.org/proper/commons-fileupload/using.html). – Sticks