Java 通过ApacheCommonsFileUpload可以上载哪些文件扩展名

Java 通过ApacheCommonsFileUpload可以上载哪些文件扩展名,java,file-upload,apache-commons-fileupload,Java,File Upload,Apache Commons Fileupload,我使用ApacheCommonsFileUpload上传文件 我无法在服务器上上载xml、js、css文件,但它在pdf、txt、jsp上运行良好。它显示了扩展名为“.tmp”的文件。有人能告诉我“Apache Commons FileUpload”支持哪些文件扩展名吗 我甚至可以上传压缩的txt/pdf文件,但当我尝试对xms/js/css文件进行同样的操作时,它没有起作用 public class FileLocationContextListener implements ServletC

我使用ApacheCommonsFileUpload上传文件

我无法在服务器上上载xml、js、css文件,但它在pdf、txt、jsp上运行良好。它显示了扩展名为“.tmp”的文件。有人能告诉我“Apache Commons FileUpload”支持哪些文件扩展名吗

我甚至可以上传压缩的txt/pdf文件,但当我尝试对xms/js/css文件进行同样的操作时,它没有起作用

public class FileLocationContextListener implements ServletContextListener {

public void contextInitialized(ServletContextEvent servletContextEvent) {
    String rootPath = System.getProperty("catalina.home");
    ServletContext ctx = servletContextEvent.getServletContext();
    String relativePath = ctx.getInitParameter("tempfile.dir");
    File file = new File(rootPath + File.separator + relativePath);
    if(!file.exists()) file.mkdirs();
    System.out.println("File Directory created to be used for storing files>>>>>"+rootPath +"##"+ File.separator + relativePath);
    ctx.setAttribute("FILES_DIR_FILE", file);
    ctx.setAttribute("FILES_DIR", rootPath + File.separator + relativePath);
}

public void contextDestroyed(ServletContextEvent servletContextEvent) {
    //do cleanup if needed
}

}
----------------------------------控制器--------------------------------------

public class UploadDownloadFileServlet extends HttpServlet {

private static final long serialVersionUID = 1L;
private ServletFileUpload uploader = null;

@Override
public void init() throws ServletException{
    DiskFileItemFactory fileFactory = new DiskFileItemFactory();
    File filesDir = (File) getServletContext().getAttribute("FILES_DIR_FILE");
    fileFactory.setRepository(filesDir);
    this.uploader = new ServletFileUpload(fileFactory);
            System.out.println("INSIDE INIT--");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String fileName = request.getParameter("fileName");
            System.out.println("INSIDE GET METHOD :----"+fileName);
    if(fileName == null || fileName.equals("")){
        throw new ServletException("File Name can't be null or empty");
    }
    File file = new File(getServletContext().getAttribute("FILES_DIR")+File.separator+(fileName).substring(3));
    if(!file.exists()){
        throw new ServletException("File doesn't exists on server.");
    }
    System.out.println("File location on server::"+file.getAbsolutePath());
    ServletContext ctx = getServletContext();
    InputStream fis = new FileInputStream(file);
    String mimeType = ctx.getMimeType(file.getAbsolutePath());
    response.setContentType(mimeType != null? mimeType:"application/octet-stream");
    response.setContentLength((int) file.length());
    response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");

    ServletOutputStream os       = response.getOutputStream();
    byte[] bufferData = new byte[1024];
    int read=0;
    while((read = fis.read(bufferData))!= -1){
        os.write(bufferData, 0, read);
    }
    os.flush();
    os.close();
    fis.close();
    System.out.println("File downloaded at client successfully");
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    if(!ServletFileUpload.isMultipartContent(request)){
        throw new ServletException("Content type is not multipart/form-data");
    }

    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.write("<html><head></head><body>");
    try {
        List<FileItem> fileItemsList = uploader.parseRequest(request);
        Iterator<FileItem> fileItemsIterator = fileItemsList.iterator();
        while(fileItemsIterator.hasNext()){
            FileItem fileItem = fileItemsIterator.next();
            System.out.println("FieldName="+fileItem.getFieldName());
            System.out.println("FileName="+fileItem.getName());
            System.out.println("ContentType="+fileItem.getContentType());
            System.out.println("Size in bytes="+fileItem.getSize());
            System.out.println("****"+getServletContext().getAttribute("FILES_DIR"));

            File file = new File(getServletContext().getAttribute("FILES_DIR")+File.separator+(fileItem.getName()).substring(3));
            System.out.println("Absolute Path at server="+file.getAbsolutePath());
            fileItem.write(file);
            out.write("File "+fileItem.getName()+ " uploaded successfully.");
            out.write("<br>");
            out.write("<a href=\"UploadDownloadFileServlet?fileName="+fileItem.getName()+"\">Download "+fileItem.getName()+"</a>");
        }
    } catch (FileUploadException e) {
        out.write("Exception in uploading file1.");
    } catch (Exception e) {
        out.write("Exception in uploading file.");
    }
    out.write("</body></html>");
}

}
公共类UploadDownloadFileServlet扩展HttpServlet{
私有静态最终长serialVersionUID=1L;
私有ServletFileUpload上载程序=null;
@凌驾
public void init()引发ServletException{
DiskFileItemFactory fileFactory=新的DiskFileItemFactory();
File filesDir=(File)getServletContext().getAttribute(“FILES_DIR_File”);
setRepository(filesDir);
this.uploader=新ServletFileUpload(fileFactory);
System.out.println(“内部初始化--”);
}
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
字符串文件名=request.getParameter(“文件名”);
System.out.println(“内部获取方法:----”+文件名);
if(fileName==null | | fileName.equals(“”){
抛出新的ServletException(“文件名不能为null或空”);
}
File File=newfile(getServletContext().getAttribute(“FILES_DIR”)+File.separator+(fileName.substring(3));
如果(!file.exists()){
抛出新的ServletException(“服务器上不存在文件”);
}
System.out.println(“服务器上的文件位置::”+File.getAbsolutePath());
ServletContext ctx=getServletContext();
InputStream fis=新文件InputStream(文件);
字符串mimeType=ctx.getMimeType(file.getAbsolutePath());
response.setContentType(mimeType!=null?mimeType:“应用程序/八位字节流”);
response.setContentLength((int)file.length());
setHeader(“内容处置”、“附件;文件名=\”“+文件名+”\”);
ServletOutputStream os=response.getOutputStream();
字节[]缓冲数据=新字节[1024];
int read=0;
while((read=fis.read(bufferData))!=-1){
写入(缓冲数据,0,读取);
}
os.flush();
os.close();
fis.close();
System.out.println(“在客户端成功下载文件”);
}
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
如果(!ServletFileUpload.isMultipartContent(请求)){
抛出新的ServletException(“内容类型不是多部分/表单数据”);
}
response.setContentType(“text/html”);
PrintWriter out=response.getWriter();
请写出(“”);
试一试{
List fileItemsList=uploader.parseRequest(请求);
迭代器fileItemsIterator=fileItemsList.Iterator();
while(fileItemsIterator.hasNext()){
FileItem=fileItemsIterator.next();
System.out.println(“FieldName=“+fileItem.getFieldName());
System.out.println(“FileName=“+fileItem.getName());
System.out.println(“ContentType=“+fileItem.getContentType());
System.out.println(“字节大小=“+fileItem.getSize());
System.out.println(“*****”+getServletContext().getAttribute(“文件目录”));
File File=newfile(getServletContext().getAttribute(“FILES_DIR”)+File.separator+(fileItem.getName()).substring(3));
System.out.println(“服务器上的绝对路径=“+file.getAbsolutePath());
fileItem.write(文件);
out.write(“文件”+fileItem.getName()+“上传成功”);
写出(“
”); 请写出(“”); } }捕获(文件上载异常){ out.write(“上传文件1时出现异常”); }捕获(例外e){ out.write(“上传文件中的异常”); } 请写出(“”); } }
您能给我们看一些代码吗please@Arno_Geismar:添加了我的代码。很抱歉,似乎无法找到导致您的错误的原因problem@Arno_Geismar:我认为它不支持某些文件。我只是想确定我是否正确。我的直觉是,每个文件类型都必须是可发送的,只要可以分解为流。我知道您可以在xml配置中声明如何限制文件类型,但找不到任何文件不可发送的硬限制。