标签: apache-commons-fileupload

如何在使用带有多个文件的jquery ajax FormData()时在multipart/form-data请求上设置边界

我有一个HTML表单,需要在一个请求中将3个部分上传到现有的REST API.我似乎无法找到有关如何在FormData提交上设置边界的文档.

我试图按照这里给出的示例: 如何在jQuery中使用Ajax请求发送FormData对象?

但是,当我提交数据时,它会被以下堆栈跟踪拒绝:

Caused by: org.apache.commons.fileupload.FileUploadException: the request was rejected because no multipart boundary was found.
Run Code Online (Sandbox Code Playgroud)

我该如何设置边界?

这是HTML/Javascript:

   <script type="text/javascript">
    function handleSubmit() {


        var jsonString = "{" +
                "\"userId\":\"" + document.formSubmit.userId.value + "\"" +
                ",\"locale\":\"" + document.formSubmit.locale.value + "\"" +
                "}";

        var data = new FormData();
        data.append('Json',jsonString);
        data.append('frontImage', document.formSubmit.frontImage.files[0]);
        data.append('backImage', document.formSubmit.backImage.files[0]);

        document.getElementById("sent").innerHTML = jsonString;
        document.getElementById("results").innerHTML = "";
        $.ajax({
                   url:getFileSubmitUrl(),
                   data:data,
                   cache: false,
                   processData: false,
                   contentType: 'multipart/form-data',
                   type:'POST',
                   success:function (data, status, req) {
                       handleResults(req);
                   },
                   error:function (req, status, error) …
Run Code Online (Sandbox Code Playgroud)

ajax jquery multipartform-data apache-commons-fileupload

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

SpringBoot:使用Apache Commons FileUpload上传大型流文件

我试图使用'流'Apache Commons File Upload API上传大文件.

我使用Apache Commons File Uploader而不是默认的Spring Multipart上传器的原因是当我们上传非常大的文件大小(~2GB)时它失败了.我在一个GIS应用程序上工作,这种文件上传很常见.

我的文件上传控制器的完整代码如下:

@Controller
public class FileUploadController {

    @RequestMapping(value="/upload", method=RequestMethod.POST)
    public void upload(HttpServletRequest request) {
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if (!isMultipart) {
            // Inform user about invalid request
            return;
        }

        //String filename = request.getParameter("name");

        // Create a new file upload handler
        ServletFileUpload upload = new ServletFileUpload();

        // Parse the request
        try {
            FileItemIterator iter = upload.getItemIterator(request);
            while (iter.hasNext()) {
                FileItemStream item = iter.next();
                String name = item.getFieldName();
                InputStream stream = item.openStream();
                if …
Run Code Online (Sandbox Code Playgroud)

spring apache-commons apache-commons-fileupload spring-boot

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

导入org.apache.commons无法在eclipse中解决

我在eclipse中编译我的项目时遇到了问题.它推迟了错误导入org.apache.commons无法解决.

在此输入图像描述

请有人告诉我这个错误告诉了什么.以及如何解决它.

eclipse servlets apache-commons-fileupload

21
推荐指数
3
解决办法
13万
查看次数

使用Spring 3 @ExceptionHandler和commons FileUpload和SizeLimitExceededException/MaxUploadSizeExceededException

在上传大文件时,我无法捕捉并优雅地处理commons fileupload FileUploadBase.SizeLimitExceededException或spring MaxUploadSizeExceededException.

据我所知,这些异常在数据绑定期间抛出,在实际到达控制器之前,因此导致500并且不调用异常处理程序方法.有没有人遇到过这个,以及正确处理这些异常的最佳方法是什么?

exception-handling file-upload spring-mvc apache-commons-fileupload

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

java.lang.NoClassDefFoundError:javax/servlet/http/HttpServletRequest

我正在开发一个servlet,它接收包含多个文件内容的多部分请求,我正在使用apache commons文件上传库.

当我调用parseRequest(request);方法servlet抛出异常时:

GRAVE: Servlet.service() for servlet DiffOntology threw exception
java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest
    at org.apache.commons.fileupload.servlet.ServletRequestContext.getContentType(ServletRequestContext.java:73)
    at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:882)
    at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331)
    at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:349)
    at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
    at DiffOntology.doPost(DiffOntology.java:38)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:738)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:619)
Run Code Online (Sandbox Code Playgroud)

我把所有库放在WEB-INF/lib中.

编辑:

servlet-api.jar在正确的目录(tomcat/lib)中,所有其他库都在WEB-INF/lib中

我想也许问题可能如下:我在Eclipse中开发这个Web项目,我在类路径中导入了文件上传库.

怎么不行?

我很绝望!!

java eclipse tomcat servlets apache-commons-fileupload

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

处理MaxUploadSizeExceededException无法停止上传文件

我想检查上传文件的大小并防止文件完全加载到内存中.我正在使用CommonsMultipartFile.上传的文件将被处理并保存在DB中.AbstractCoupleUploadController类处理包含文件的传入请求:

public abstract class AbstractCoupleUploadController<T extends Serializable> extends RemoteServiceServlet implements ServletContextAware,
        UploadServlet<WorkshopHistoryModel>
{
    ...

    @RequestMapping(method={RequestMethod.GET,RequestMethod.POST})
    public ModelAndView handleRequest(@RequestParam("firstFile") CommonsMultipartFile firstFile,
            @RequestParam("secondFile") CommonsMultipartFile secondFile, HttpServletRequest request, HttpServletResponse response)
    {
        synchronized(this)
        {
            initThreads();
            perThreadRequest.set(request);
            perThreadResponse.set(response);
        }

        handleUpload(firstFile,secondFile,request,response);
        response.getWriter().flush();
        response.flushBuffer();
        return null;
    }

    private void handleUpload(CommonsMultipartFile firstFile, CommonsMultipartFile secondFile, HttpServletRequest request,
        HttpServletResponse response) throws IOException
    {
        response.setContentType("text/html");
        if(firstFile.getSize() == 0 || secondFile.getSize() == 0)
        {
            response.getWriter().print(AppConstants.UPLOAD_ZERO_SIZE_FILE);
            return;
        }

        // other validations
        // uploading:
        try
        {
            String content = request.getParameter(CoupleUploadPanel.CONTENT);
            T model = deserialize(content); …
Run Code Online (Sandbox Code Playgroud)

java spring file-upload spring-mvc apache-commons-fileupload

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

Spring会将内容保存在内存中还是存储在磁盘中?

当一个文件说从浏览器上传100 MB大小时,Spring将整个数据保存在内存中或临时存储在磁盘中.在通过Spring doc之后,我知道如何设置临时目录,但我想知道如果我不提及会发生什么.

我有以下声明:

<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
Run Code Online (Sandbox Code Playgroud)

豆 :

public class FileHolder {

    private MultipartFile file;

    public void setFile(MultipartFile file) {
        this.file = file;
    }

    public MultipartFile getFile() {
        return file;
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的bean中的"file"对象是否会保存100 MB的数据?

java spring-mvc apache-commons-fileupload

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

使用multipart发送附加数据

我使用apache-commons-fileupload从获取文件clientserver.(使用JSPServlet).

JSP/HTML

<form method="POST" action="GetFile" enctype="multipart/form-data">
<input type="file" name="datafile">
<input type="text" name="text1">
<input type="submit" value="Next">
</form>
Run Code Online (Sandbox Code Playgroud)

Servlet:GetFile

System.out.println(request.getParameter("text1"));
Run Code Online (Sandbox Code Playgroud)

我能上传文件到服务器上,但我不能够得到的值text1servlet(我得到null的值text1servlet),我需要这样textfield的形式提交一些额外的信息,同时上传到server.

  • enctype="multipart/form-data"形式的选项不允许其他形式的数据所需提交?如果它不允许它,那么我必须将其他选项发送textfield给它server.
  • 或者我的代码中还有其他问题吗?

java jsp servlets file-upload apache-commons-fileupload

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

Spring中的异步文件上传

这就是我正在做的事情.我想通过Ajax将multipart文件上传到我的Spring网络应用程序.当服务器收到POST请求时,它会在数据库中创建一个票号.然后它启动一个处理实际文件上传的线程.然后服务器返回票号.

我使用CommonsMultipartResolver来处理请求,我已将resolveLazily标志设置为true,以便不立即解决Multipart.

所以这就是我所拥有的东西

@Controller
public class myController{

    @RequestMapping(value = "/upload", method = RequestMethod.POST)
    @ResponseStatus(value = HttpStatus.OK)
    @ResponseBody
    public String upload(MultipartHttpServletRequest request, String fileName){

        String ticket = dao.createUploadTicket(fileName);
        Runnable run = new Runnable(){

            @Override
            public void run(){

                dao.writeUpdate(ticket, "Getting data from request");
                final MultipartFile file = request.getFile("theFile");
                dao.writeUpdate(ticket, "Multipart file processed");
                try {
                   dao.writeUpdate(ticket, "Saving file to disk");
                   file.transferTo(new File("/myDirectory"));
                   dao.writeUpdate(ticket, "File saved to disk");
                }
                catch(Exception e){
                   dao.writeUpdate(ticket, "File upload failed with the exception " + e.toString());
                }
            }
        }; …
Run Code Online (Sandbox Code Playgroud)

java asynchronous file-upload spring-mvc apache-commons-fileupload

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

Apache Commons文件上传超时仅适用于Firefox

我在Java项目中使用Apache commons fileupload 1.4库。我有一个具有经典形式的html部分,带有文件输入和一些隐藏字段。

我仅使用Firefox> = 52上载> 500ko左右的文件时遇到问题

它与Chrome或Internet Explorer中的10mo文件兼容。但是,使用Firefox,在提交表单后等待了几分钟,我超时了。

经过一些调试后,我看到造成超时的代码是:

List<FileItem> items = (new ServletFileUpload(new DiskFileItemFactory())).parseRequest(request);
Run Code Online (Sandbox Code Playgroud)

等待原因的部分是“ parseRequest”。

我尝试使用IntelliJ中的调试器调试请求的内容,但是无法以原始格式复制此请求对象的整个内容值。

在以下情况下可以正常工作:-Firefox:版本<= 52或文件大小<500ko(大约不是很精确)-Internet Explorer-Chrome

没有文件大小限制,这似乎取决于请求的大小,因为解析请求部分要花费太多时间...

在两种情况下,我都收到带有Firefox扩展名的HTTP请求。一个生成的文件上传失败的3mo文件(请求文件很大,是上传文件大小的3倍):https : //code.empreintesduweb.com/13561.html

一个生成的上传文件200ko有效(请求文件很小):https ://code.empreintesduweb.com/13560.html

实际上,主要区别在于在Chrome或IE中,我在请求标头中没有上传文件的原始内容:

具有以下部分的对象:obj stream .... endstream endobj

仅在Firefox中显示...

upload servlets http request apache-commons-fileupload

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