标签: apache-commons-fileupload

创建DiskFileItem时出现java.lang.NullPointerException

我正在尝试使用Spring 3编写一个单元测试来处理文件上传控制器.现在,如果我通过控制器将图像发送到我的服务方法,一切正常.但是在进行直接单元测试时,我得到一个空指针异常.

DiskFilteItem当我手动实例化它时,它内部的属性"dfos"似乎是null,但是当MultipartFile从控制器检索a时它被填充.

    File file = new File("//Users//test//Downloads//testimage.jpg");
    log.info("found file: " +file.exists());
    log.info("file size: " +file.length());
    String fieldName = "field";
    String contentType = "image/jpeg";
    boolean isFormField = false;
    String fileName = "testimage.jpg";
    int sizeThreshold = 10240;

    DiskFileItemFactory factory = new DiskFileItemFactory();

    DiskFileItemFactory factory = new DiskFileItemFactory();
    // throws null pointer
    FileItem fi = factory.createItem(fieldName,contentType,isFormField,fileName);

    // so does this one
    DiskFileItem item = new DiskFileItem(fieldName, contentType, isFormField, fileName, sizeThreshold, file);
    MultipartFile f = new CommonsMultipartFile(item);
Run Code Online (Sandbox Code Playgroud)

我觉得我在设置中遗漏了一些愚蠢的东西.我的pom文件包含以下依赖项.

    <dependency>
        <groupId>commons-fileupload</groupId> …
Run Code Online (Sandbox Code Playgroud)

java spring file-upload apache-commons-fileupload

4
推荐指数
1
解决办法
7164
查看次数

tomcat 10 ServletFileUpload#parseRequest(request) 出错

正在开发一个简单的文件上传程序。我必须使用 jakarta.servlet.* 类,因为我使用的是 Tomcat v10。我在 parseRequest(request) 行收到编译时错误。

代码 :

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        ServletFileUpload sf = new ServletFileUpload(new DiskFileItemFactory());
        try {
            List<FileItem> multifiles = sf.parseRequest(request);
            
            for(FileItem i : multifiles) {
                i.write(new File("C:/Users/Luffy/Documents/FileUploadDemo/"+i.getName()));
            }
            response.getWriter().print("The file is uploaded");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        response.getWriter().print("The file is uploaded");
    }
Run Code Online (Sandbox Code Playgroud)

错误如下:

ServletFileUpload 类型中的方法 parseRequest(javax.servlet.http.HttpServletRequest) 不适用于参数 (jakarta.servlet.http.HttpServletRequest)

我在谷歌上搜索了很多但找不到解决方案。

请提出解决方法或可能的解决方案。提前致谢。

这是我在 Stack Overflow 上的第一篇文章。所以请忽略我的错误(如果有的话):)

servlets multifile-uploader apache-commons-fileupload jakarta-ee tomcat10

4
推荐指数
1
解决办法
5413
查看次数

upload.parseRequest(request)返回commons.fileUpload中的空列表

我正在使用org.apache.commons.fileUpload.FileItem和其他相关的类将文件从本地机器上传到服务器(虽然对于当前测试,两台机器都是相同的).

我有.jsp文件作为UI和servlet来处理上传.现在当请求到达声明时

List items = upload.parseRequest(request);
Run Code Online (Sandbox Code Playgroud)

它返回空列表.我在很多地方搜索过这个东西.其中大多数都指定了parserequest()返回空的症状.但无法找到避免这种情况的确切解决方案.在一个地方,我可以看到Tomcat可能有可能已经解析了请求的过滤器,这就是为什么在上面调用parseRequest返回空列表.但是没有规范如何避免这种情况.

是因为我使用的Web服务器(JBOss)?或者它与java版本和commons.jar版本冲突有什么关系?

我在用

  • jre 1.6
  • 的jboss-4.0.4.CR2
  • 公地文件上传-1.2.2.jar
  • Eclipse(创建动态Web项目)

你的帮助非常有用.

java jboss-4.0.x apache-commons-fileupload

3
推荐指数
1
解决办法
9387
查看次数

request.getParameter在提交按钮上给出null值

点击生成PDF /生成Excel提交按钮,它正在请求servlet FileUpload进行处理.现在当我试图获取我按下的提交按钮的值时,它给我的值为null.我想知道为什么会这样?

这是我的HTML代码:

<form action="FileUpload" method="post" enctype="multipart/form-data">
<input type="file" id="filename" name="filename"><br>
<input type="button" value="Upload"><br>
<input type="submit"  value= "Generate PDF" name="pdf">
<input type = "submit" value="Generate Excel" name="xls">
</form>
Run Code Online (Sandbox Code Playgroud)

这是我的servlet代码:

String generatePDF= request.getParameter("pdf");//null
if(generatePDF.equals("Generate PDF"))//Giving NullPointerException at this step
{
  System.out.println("generatePDF button pressed");
}
Run Code Online (Sandbox Code Playgroud)

java servlets multipartform-data apache-commons-fileupload

3
推荐指数
1
解决办法
2万
查看次数

commons-fileupload 和 jakarta.servlet

我们目前正在将应用程序迁移到 Spring Boot 3。我们一直在使用 Commons FileUpload 流 API 直接将大型多部分文件加载到远程文件共享中。但是,我们遇到了一个问题,即javax.servlet.http.HttpServletRequest已将jakarta.servlet.http.HttpServletRequest. 因此,FileUpload 库不再起作用,因为它需要javax.servlet.http.HttpServletRequest.

Servlet API 或 Spring 框架是否提供类似的文件流功能,而不需要预先将所有文件保存在内存中?

java servlets apache-commons-fileupload spring-boot

3
推荐指数
1
解决办法
5135
查看次数

对于commons-fileupload和commons-io的Maven依赖

我想通过STS将commons-fileupload和commons-io库添加到我的项目中.当我试图在我的pom.xml中添加依赖项并更新它时,我继续收到以下所有版本的错误

Maven dependency problem
    ArtifactDescriptorException: Failed to read artifact descriptor for commons-fileupload:commons-fileupload:jar:1.1: 
    ArtifactResolutionException: Failure to transfer commons-fileupload:commons-fileupload:pom:1.1 from http://repo1.maven.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced. 

    Original error: Could not transfer artifact commons-fileupload:commons-fileupload:pom:1.1 from/to central (http://repo1.maven.org/maven2): Connect times out
Run Code Online (Sandbox Code Playgroud)

我试图从mvn查找

http://mvnrepository.com/artifact/commons-io/commons-io/2.4
http://mvnrepository.com/artifact/commons-fileupload/commons-fileupload/1.2.2
Run Code Online (Sandbox Code Playgroud)

我没有其他库的问题,特别是commons-logging Im使用SpringSource Tool Suite版本:2.9.2.RELEASE用于我的Spring项目

感谢所有的答复

maven sts-springsourcetoolsuite apache-commons-fileupload

2
推荐指数
1
解决办法
1万
查看次数

FileNotFoundException(拒绝权限)

所有,我正在使用commons-FileUpload来允许我的学生通过班级网站将他们的作业上传到我的服务器.它可以很好地在我的本地机器上运行tomcat/eclipse.但是,在我的服务器上测试时,我通过digitalocean.com获取了FileNotFoundException(PermissionDenied).

堆栈跟踪:

java.io.FileNotFoundException:
 /uploads/cosc111fall2013/Assignment1/Program1.java (Permission denied)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:209)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:160)
    at org.apache.commons.fileupload.disk.DiskFileItem.write(DiskFileItem.java:394)
    at uploadServlet.Uploader.doPost(Uploader.java:127)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
Run Code Online (Sandbox Code Playgroud)

违规代码:

try {
            for (FileItem fi : uploaded) {
                fi.write(new File(saveDirectory + fileName + "_"
                        + FilenameUtils.getName(fi.getName())));
            }
        } catch (Exception e) {
            e.printStackTrace();
            response.sendRedirect("/uploadFailed.jsp");
            return;
        }
Run Code Online (Sandbox Code Playgroud)

我只是简化了程序写入的目录,因此它们都是drw-rw-rw-.有小费吗?

java tomcat servlets apache-commons-fileupload

2
推荐指数
1
解决办法
1万
查看次数

java.lang.ClassNotFoundException:org.apache.commons.fileupload.FileItemFactory

我试图UploadServlet通过apache tomcat 8.0.14 编译servlet.我的web.xml很好并且UploadServlet.java已经正确编译但是当尝试运行时我得到以下错误

错误

HTTP Status 500 - Error instantiating servlet class UploadServlet

exception
javax.servlet.ServletException: Error instantiating servlet class UploadServlet

root cause
java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory

root cause
java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory
Run Code Online (Sandbox Code Playgroud)

UploadServlet.java

import java.io.*;
import java.util.*;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.output.*;

public class UploadServlet extends HttpServlet {

   private boolean isMultipart;
   private String filePath;
   private int maxFileSize = 50 * 1024;
   private int maxMemSize …
Run Code Online (Sandbox Code Playgroud)

java servlets classnotfoundexception apache-commons-fileupload

2
推荐指数
1
解决办法
5109
查看次数

org.apache.commons.fileupload.servlet.ServletFileUpload.isMultipartContent(Ljakarta/servlet/http/HttpServletRequest;)Z

我将 JSF javax 迁移到雅加达。但是,我收到了如标题所示的错误。我找不到这其中的原因。感谢您对此的帮助。

Web 服务器 GlassFish 6.2.5 Jakarta:jakarta.jakartaee-api 9.1.0 PrimeFaces 11.0.0 OmniFaces:4.0-M17

我查看了此处的示例,但无法将其改编为 GlassFish

这个帖子

日志

java.lang.NoSuchMethodError: org.apache.commons.fileupload.servlet.ServletFileUpload.isMultipartContent(Ljakarta/servlet/http/HttpServletRequest;)Z
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:94)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167)
    at org.omnifaces.filter.GzipResponseFilter.doFilter(GzipResponseFilter.java:183)
    at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java:108)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167)
    at org.glassfish.tyrus.servlet.TyrusServletFilter.doFilter(TyrusServletFilter.java:83)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167)
    at com.kurtomerfaruk.core.filters.AuthorizationFilter.doFilter(AuthorizationFilter.java:49)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167)
    at org.omnifaces.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:123)
    at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java:108)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167)
    at org.omnifaces.facesviews.FacesViewsForwardingFilter.filterExtensionLessToExtension(FacesViewsForwardingFilter.java:185)
    at org.omnifaces.facesviews.FacesViewsForwardingFilter.filterExtensionLess(FacesViewsForwardingFilter.java:142)
    at org.omnifaces.facesviews.FacesViewsForwardingFilter.filterExtensionLess(FacesViewsForwardingFilter.java:128)
    at org.omnifaces.facesviews.FacesViewsForwardingFilter.doFilter(FacesViewsForwardingFilter.java:84)
    at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java:108)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:215)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:119)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:611)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:550)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:75)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:114)
    at …
Run Code Online (Sandbox Code Playgroud)

jsf primefaces apache-commons-fileupload jakarta-ee

2
推荐指数
1
解决办法
452
查看次数

文件是否附加在文件字段中?

我有以下代码:

if (formItems != null && formItems.size() > 0) {
    // iterates over form's fields
    for (FileItem item : formItems) {
        // processes only fields that are not form fields
        if (!item.isFormField()) {
            String fileName = new File(item.getName()).getName();
            String filePath = uploadPath + File.separator + fileName;
            File storeFile = new File(filePath);

            // saves the file on disk
            item.write(storeFile);
            session.setAttribute("image", fileName);
        }
        // processes only form fields
        else {
            String fieldname = item.getFieldName();
            String fieldvalue = item.getString();
            session.setAttribute(fieldname, fieldvalue);
        }
    } …
Run Code Online (Sandbox Code Playgroud)

java servlets file-upload apache-commons-fileupload

1
推荐指数
1
解决办法
3843
查看次数

使用Apache commons FileUpload

这不行.问题是我甚至不知道应该发生什么.我无法调试此代码.我想将上传存储到临时文件夹"temp",然后将它们移动到"applets".请帮忙?显然正在访问servlet,但我无法找到上传的文件...在此先感谢.

表单(使用scriptlet创建 - 如果可能导致问题,我将其放在此处):

<%
out.write("<p>Upload a new game:</p>");
                    out.write("<form name=\"uploadForm\" action=\"game.jsp\" "
                    + "method=\"POST\" enctype=\"multipart/form-data\">"
                    + "<input type=\"file\" name=\"uploadSelect\" value=\"\" width=\"20\" />"
                    + "<br><input type=\"submit\" value=\"Submit\" name=\"uploadSubmitButton\" "
                    + "onclick = \"submitToServlet2('UploadGameServlet');\">"        
                    + "</form>");
 %>
Run Code Online (Sandbox Code Playgroud)

哪个叫这个javascript:

function submitToServlet2(newAction)
    {
       document.uploadForm.action = newAction;
    }
Run Code Online (Sandbox Code Playgroud)

反过来又转到servlet(代码包含在full中,因为可能有一些重要的元素隐藏)

package org.project;

import java.io.*;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
// import servlet stuff
import org.apache.commons.fileupload.*;


public class UploadGameServlet extends HttpServlet {

/** 
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. …
Run Code Online (Sandbox Code Playgroud)

java upload jsp apache-commons-fileupload

0
推荐指数
1
解决办法
7423
查看次数

超过 FileSizeMax 时取消 FileUpload

我有一个在 JBoss 6.1 中运行的 JSF 应用程序,它使用内部的 Tomcat Servlet 容器。

我已经实现了使用 apache commons 文件上传的上传。我想防止上传过大的文件,并 fileSizeMax在类中将该属性设置为 10MB FileUploadBase。它有效,文件上传会FileSizeLimitExceededException为所有大于 10MB的文件抛出一个。此异常会在不到一秒的时间内引发。但主要问题是,整个文件将通过网络传输。我通过检查网络流量发现了这一点。之后重定向到错误页面完成。

如何在超过最大大小时中断文件传输而不传输整个文件?我假设由于 web 表单属性,文件将在多个包中传输enctype ="multipart/form-data"

java jsf file-upload apache-commons apache-commons-fileupload

0
推荐指数
1
解决办法
2219
查看次数