我正在尝试使用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) 正在开发一个简单的文件上传程序。我必须使用 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
我正在使用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版本冲突有什么关系?
我在用
你的帮助非常有用.
点击生成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) 我们目前正在将应用程序迁移到 Spring Boot 3。我们一直在使用 Commons FileUpload 流 API 直接将大型多部分文件加载到远程文件共享中。但是,我们遇到了一个问题,即javax.servlet.http.HttpServletRequest已将jakarta.servlet.http.HttpServletRequest. 因此,FileUpload 库不再起作用,因为它需要javax.servlet.http.HttpServletRequest.
Servlet API 或 Spring 框架是否提供类似的文件流功能,而不需要预先将所有文件保存在内存中?
我想通过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项目
感谢所有的答复
所有,我正在使用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-.有小费吗?
我试图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
我将 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) 我有以下代码:
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) 这不行.问题是我甚至不知道应该发生什么.我无法调试此代码.我想将上传存储到临时文件夹"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) 我有一个在 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
java ×9
servlets ×6
file-upload ×3
jakarta-ee ×2
jsf ×2
jboss-4.0.x ×1
jsp ×1
maven ×1
primefaces ×1
spring ×1
spring-boot ×1
tomcat ×1
tomcat10 ×1
upload ×1