我正在尝试构建一个可以将文件上传到我的服务器的Web应用程序,并获取一个供以后下载的链接。
我用下一个代码制作了两个东西:
String subirArchivo(int codigo, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
Part filePart = request.getPart("archivo"); // Obtiene el archivo
String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); // MSIE fix.
//InputStream fileContent = filePart.getInputStream(); //Lo transforma en InputStream
String path="/archivos/";
File uploads = new File(path); //Carpeta donde se guardan los archivos
uploads.mkdirs(); //Crea los directorios necesarios
File file = File.createTempFile("cod"+codigo+"-", "-"+fileName, uploads); //Evita que hayan dos archivos con el mismo nombre
try (InputStream input = filePart.getInputStream()){
Files.copy(input, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
}
return file.getPath();
}
当文件上传到C:\ archivos时,我不得不添加
<Context docBase="C:\archivos" path="/archivos" />
来自tomcat config的server.xml内部。
问题是用户可以上传文件并执行。例如,如果他上传.jsp文件,当用户调用它时,由服务器执行
我的问题是。怎么解决?
答案 0 :(得分:0)
Thans to nikos-paraskevopoulos,我发现如何以严格的方式上传和下载我的文件:
上传:
String subirArchivo(int codigo, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
Part filePart = request.getPart("archivo"); // Obtiene el archivo
String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); // MSIE fix.
if(!fileName.isEmpty()){
String path="/archivos/";
File uploads = new File(path); //Carpeta donde se guardan los archivos
uploads.mkdirs(); //Crea los directorios necesarios
File file = File.createTempFile("cod"+codigo+"-", "-"+fileName, uploads); //Evita que hayan dos archivos con el mismo nombre
try (InputStream input = filePart.getInputStream()){
Files.copy(input, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
}
return file.getPath();
}
return null;
}
发布链接:
if(adjunto!=null){
String filename=adjunto.substring(10); //La longitud de /archivos/
String borrar="<a href=borrarServlet?codigo="+codigo+"&comentario="+idComentario+"&file="+filename+"><img width=\"16\" src=images/borrar.png></img></a>";
comentarios+="<tr><td>"+fecha+"</td>"+"<td>"+texto+"<br><a class=\"adj\" href=."+adjunto+">Descargar archivo</a></td><td>"+borrar+"</td></tr>";
}
下载:
String filename = URLDecoder.decode(request.getPathInfo().substring(1), "UTF-8");
File file = new File("/archivos", filename);
response.setHeader("Content-Type", getServletContext().getMimeType(filename));
response.setHeader("Content-Length", String.valueOf(file.length()));
response.setHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\"");
Files.copy(file.toPath(), response.getOutputStream());