2013-06-19 5 views
0

Я пытаюсь загрузить файл в JSP с помощьюJSP, как получить полное имя файла в JSP

<form action="EdgeWarUpload" method="post" 
        enctype="multipart/form-data"> 
    <input type="file" name="file" size="50" /> 
    <br /> 
     <input type="submit" value="Upload File" /> 

где EdgeWarUpload является servlet.User просматривает и выберите файл для загрузки. Я хочу полный путь с именем файла (имя пути + имя файла) в сервлете EdgeWarUpload для создания BufferedInputStream. Но я не могу его получить. Обязательно проверьте и ответьте.

+0

Во-первых, я не думаю, что есть какие-либо использование полного имени файла от пользователя на стороне сервера, как «C: \ Users \ пример \ example.jpg». Во-вторых, я не думаю, что это все равно, так как это может показать некоторую конфиденциальную информацию как побочный эффект. – midhunhk

+0

Я не верю, что вы действительно можете получить эту информацию ... Почему вы этого хотите? – fge

ответ

1
<html> 
    <header></header> 
    <body> 
     <form method="POST" action="upload.do"> 
      escolha o arquivo para fazer upload: 
      <input type="file" name="ctrupload"><br> 
      <input type="submit" name="submit" value="enviar..."> 
     </form> 
    </body> 
</html> 

попробовать это

public class Uploader extends HttpServlet { 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     ServletInputStream sis = request.getInputStream(); 

     byte[] b = new byte[request.getContentLength()]; 

     System.out.println(request.getContentLength()); 

     sis.read(b,0,b.length); 

     FileOutputStream fos = new FileOutputStream("Teste.jpg"); 
     fos.write(b); 

     sis.close(); 
     fos.flush(); 
     fos.close();   
    } 
} 

вы действительно не требуется полный путь

+0

Потенциальная утечка дескриптора файла! Ваш '.close()' должен находиться в блоке 'finally' – fge

+0

ya thats true, я обновлю его –

+0

Привет @shreyansh jogi, я попробовал это загрузить файл войны. Но война будет повреждена после загрузки. Пожалуйста, проверьте. – user1281029

0

основном не представляется возможным.

Браузеры не отправляют полный путь, потому что считаются угрозой безопасности, потому что это может говорить о клиентской системе, поэтому большинство современных браузеров поддерживают это.

на стороне сервера нет использование этого думаю. просто используйте filename.

0

здесь вы можете использовать этот код в сервлет для имени файла:

DataInputStream in = new DataInputStream(request.getInputStream()); 
     int formDataLength = request.getContentLength(); 
     byte dataBytes[] = new byte[formDataLength]; 
     int byteRead = 0; 
     int totalBytesRead = 0; 

     while (totalBytesRead < formDataLength) { 
      byteRead = in.read(dataBytes, totalBytesRead, formDataLength); 
      totalBytesRead += byteRead; 
     } 
     String file = new String(dataBytes); 
saveFile = file.substring(file.indexOf("filename=\"") + 10); 
      saveFile = saveFile.substring(0, saveFile.indexOf("\n")); 
      saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1, saveFile.indexOf("\"")); 
      System.out.println("filename3: "+ saveFile); // name of the file 

int lastIndex = contentType.lastIndexOf("="); 
      String boundary = contentType.substring(lastIndex + 1, contentType.length()); 

      int pos; 
      pos = file.indexOf("filename=\""); 
      pos = file.indexOf("\n", pos) + 1; 
      pos = file.indexOf("\n", pos) + 1; 
      pos = file.indexOf("\n", pos) + 1; 
      int boundaryLocation = file.indexOf(boundary, pos) - 4; 
      int startPos = ((file.substring(0, pos)).getBytes()).length; 
      int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length; 
      FileOutputStream fileOut = new FileOutputStream(saveFile); 
      fileOut.write(dataBytes, startPos, (endPos - startPos)); 
      fileOut.flush(); 
      fileOut.close(); 

      FileInputStream fis = new FileInputStream(saveFile); 
      ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
      byte[] buf = new byte[1024]; 
      for (int readNum; (readNum = fis.read(buf)) != -1;) { 
       bos.write(buf, 0, readNum); 
      } 
      byte[] bytes = bos.toByteArray(); 


      bos.close(); 
fis.close(); 
in.close(); 
Смежные вопросы