ciao a tutti!Spero di essere nella sezione giusta!(altrimenti spostatemi pure) Sono giorni che sto sbattendo la testa su questo problema e magari voi che ne sapete sicuramente più di me potete aiutarmi....
Allora cerco di spiegarmi al meglio.
Ho un file javascript che tramite la libreria d3.js mi costruisce il codice html delle pagine e lo sostituisce a dell'altro codice ogni volta che parte una funzione diversa... La pagina non si ricarica mai (Ajax).
Ad un certo punto ho bisogno di permettere all'utente l'upload di un'immagine per la sua foto profilo quindi faccio in modo che nell'html esca il codice <input type="file" id="file"> e un <input type="button" onclick="Javascript
erformAjaxSubmit()">
La funzione performAjaxSubmit() invia i dati ad una Servlet Java tramite una xmlHttpRequest di livello 2, che da quanto ho capito permette di inviare non solo stringhe ma anche cose più complesse come ad esempio i files.
La funzione è la seguente:
codice:
function performAjaxSubmit() {
var sampleFile = document.getElementById("file").files[0];
var formdata = new FormData();
formdata.append("sampleFile", sampleFile);
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://127.0.0.1:8080/Prova/Upload", true);
xhr.send(formdata);
xhr.onload = function(e) {
if (this.status == 200) {
alert(this.responseText);
}
};
}
Il codice nella Servlet invece è questo:
codice:
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// Check that we have a file upload request
System.out.println(request.getAttribute("username"));
isMultipart = ServletFileUpload.isMultipartContent(request);
response.setContentType("text/html");
java.io.PrintWriter out = response.getWriter( );
DiskFileItemFactory factory = new DiskFileItemFactory();
// maximum size that will be stored in memory
factory.setSizeThreshold(maxMemSize);
// Location to save data that is larger than maxMemSize.
factory.setRepository(new File("C:/Users/Marty/workspaceJEE/Prova/WebContent/imm/utenti"));
filePath="C:/Users/Marty/workspaceJEE/Prova/WebContent/imm/utenti";
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// maximum file size to be uploaded.
upload.setSizeMax( maxFileSize );
try{
// Parse the request to get file items.
List fileItems = upload.parseRequest(request);
// Process the uploaded file items
Iterator i = fileItems.iterator();
while ( i.hasNext () )
{
FileItem fi = (FileItem)i.next();
if ( !fi.isFormField () )
{
// Get the uploaded file parameters
String fieldName = fi.getFieldName();
String fileName = fi.getName();
String contentType = fi.getContentType();
boolean isInMemory = fi.isInMemory();
long sizeInBytes = fi.getSize();
// Write the file
if( fileName.lastIndexOf("\\") >= 0 ){
file = new File( filePath +"/"+
fileName.substring( fileName.lastIndexOf("\\"))) ;
}else{
System.out.println(filePath +
fileName.substring(fileName.lastIndexOf("\\")+1));
file = new File( filePath +"/"+
fileName.substring(fileName.lastIndexOf("\\")+1)) ;
}
fi.write( file ) ;
}
}
}catch(Exception ex) {
System.out.println(ex);
}
}
Ora (scusate se la domanda è un pò lunga) la cosa funziona ma ilo problema è che le immagini vengono salvate nel percorso che gli ho fornito io con il comando:
codice:
factory.setRepository(new File("C:/Users/Marty/workspaceJEE/Prova/WebContent/imm/utenti"));
Come faccio poi a salvarle in remoto? Cioè, una volta che carico il sito su ad esempio Altrevista, come faccio a fare in modo che non vengano pià salvate su C ma in una cartella nel progetto?
Spero di essermi spiegata. Uso Apache Tomcat v7.0.
Grazie mille in anticipo!