upload file jak to zrobić?

Odpowiedz Nowy wątek
2019-02-09 14:51
0

Cześć,
Przerabiam już któryś przykład "ładowania plików na dysk" i nie działa, choć błędów nie wykazuje. Muszę robić jakiś głupi błąd, którego nie mogę dostrzec.
Jest to normalny dynamic web project, który składa się z dwóch plików:
sedfile.jsp i getfile.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru File</title>
</head>
<body>
<a>File Upload:</a>
Select file: <br />
<form action="getfile.jsp" method="post" enctype="multipart/form-data">
<input type="file" name="file" size="50" />
<br />
<input type="submit" value="Go" />
</form>
</body>
</html>

i getfile

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"  pageEncoding="ISO-8859-1"%>
    <%@ page import="java.io.*,java.util.*, javax.servlet.*" %>
<%@ page import="javax.servlet.http.*" %>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="org.apache.commons.fileupload.disk.*" %>
<%@ page import="org.apache.commons.fileupload.servlet.*" %>
<%@ page import="org.apache.commons.io.output.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>File Upload</title>
</head>
<body>
<%
   File file ;
   int maxFileSize = 5000 * 1024;
   int maxMemSize = 5000 * 1024;
   String filePath = "C:/Users/tnowakowski1/Desktop/Priv/upload";

   String contentType = request.getContentType();
   if ((contentType.indexOf("multipart/form-data") >= 0)) {

      DiskFileItemFactory factory = new DiskFileItemFactory();
      factory.setSizeThreshold(maxMemSize);
      factory.setRepository(new File("C:/Users/tnowakowski1/Desktop/Priv/temp"));
      ServletFileUpload upload = new ServletFileUpload(factory);
      upload.setSizeMax( maxFileSize );
      try{ 
         List fileItems = upload.parseRequest(request);
         Iterator i = fileItems.iterator();
         out.println("<html>");
         out.println("<body>");
         while ( i.hasNext () ) 
         {
            FileItem fi = (FileItem)i.next();
            if ( !fi.isFormField () )  {
                String fieldName = fi.getFieldName();
                String fileName = fi.getName();
                boolean isInMemory = fi.isInMemory();
                long sizeInBytes = fi.getSize();
                file = new File( filePath + "yourFileName") ;
                fi.write( file ) ;
                out.println("Uploaded Filepath: " + filePath + "<br>");
                out.println("Uploaded Filename: " + fileName + "<br>");
            }
         }
         out.println("</body>");
         out.println("</html>");
      }catch(Exception ex) {
         System.out.println(ex);
      }
   }else{
      out.println("<html>");
      out.println("<body>");
      out.println("<p>No file uploaded</p>"); 
      out.println("</body>");
      out.println("</html>");
   }
%>
</body>
</html>

Podpowiedzcie proszę gdzie jest mój błąd.

edytowany 3x, ostatnio: frankiejojo, 2019-02-09 14:54

Pozostało 580 znaków

2019-02-09 15:03
1

Nie za bardzo jestem w stanie czemu tak to robisz, chyba że chcesz pracować w muzeum...


Nie pomagam przez PM. Pytania zadaje się na forum.

Pozostało 580 znaków

2019-02-09 15:34
1

Pierwszy błąd jest taki że korzystasz z tutoriala starszego od ciebie. Serio. To jest przecież jakaś Java 1.4 i skryptlety. Tak się pisało kod > 15 lat temu.
Gdybyś pisał to po ludzku to mógłbyś postawić sobie breakpointy w kodzie i go zdebugować.


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.

Pozostało 580 znaków

2019-02-10 10:31
0

OK Wziąłem inny przykład. Niemożliwe jest, że wszystkie przykłady, które znajduję w internecie nie działają.
Wyskakuje mi błąd Failed to define class paczka.FileUploadHandler i tak dalej.
Problem tkwi (wg mnie) w jakimś błędzie pliku web.xml Plik ten wygląda następująco:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
  <display-name>FileUpload</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
  <servlet-name>FileUploadHandler</servlet-name>
  <servlet-class>paczka.FileUploadHandler</servlet-class>
  </servlet>
  <servlet-mapping>
   <servlet-name>FileUploadHandler</servlet-name>
  <url-pattern>/FileUploadHandler/*</url-pattern>
  </servlet-mapping>
</web-app>

Pozostałe pliki programu:
index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru Uploading File</title>
</head>
<body>
File: <br />
<form action="FileUploadHandler" method="post" enctype="multipart/form-data">
Nazwa pliku: <input type="text" name="file_name" size="50" />
<input type="file" name="file2" size="50" />
<br />
<input type="submit" value="Upload" />
</form>
<%
String file_name=(String)request.getParameter("filename");
if(file_name!=null){
    out.println(file_name+" uploaded ");
}
%>
</body>
</html>
package paczka;
import java.io.File;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class FIleUploadHandler extends HttpServlet {
    private static final long serialVersionUID = 1L;
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        doGet(request, response);
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
String file_name = null;

response.setContentType("text/html");
PrintWriter out = response.getWriter();
boolean isMultipartContent = ServletFileUpload.isMultipartContent(request);
if(!isMultipartContent){
    return;
}
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
    List<FileItem> fields = upload.parseRequest(request);
    Iterator <FileItem> it  = fields.iterator(); 
    if(!it.hasNext()) {
        return;
    }
    while(it.hasNext()) {
        FileItem fileItem = it.next();
        boolean isFormFIeld =fileItem.isFormField();
        if(isFormFIeld) {
            if(file_name ==null) {
                if(fileItem.getFieldName().equals("file_name")) {
                    file_name = fileItem.getString();
                }
            }
        }else {
            if(fileItem.getSize()>0) {
                fileItem.write(new File("D:\\uploadedfiles\\"+fileItem.getName()));
            }
        }
    }
} catch(Exception e) {
    e.printStackTrace();
}finally {
    out.println("<script type = 'text/javasctipt'>");
    out.println("window.location.href='index.jsp?fileName"+file_name+"'");
    out.println("<script>");
    out.close();
}
}
}

Z góry dzięki za podpowiedź

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0