Java文件上传非常慢

标签 java android servlets spark-java

我构建了一个小型服务,它从 Android 设备接收图像并将它们保存到 Amazon S3 存储桶中。代码非常简单,但速度非常慢。它是这样的:

public synchronized static Response postCommentPicture(Response response, Request request){
    JsonObject ret = new JsonObject();
    OutputStream outputStream;
    String meepId = request.params(":id");
    System.out.println("1");
    if(meepId == null){
        ret.addProperty("Error", "Missing meep id");
        response.body(ret.getAsString());
        return response;
    }
    try {
        System.out.println("2");
        //Chequeamos que vengan los datos del sender
        Map<String, String> urlData = Utils.splitQuery(request.queryString());
        if(!urlData.containsKey("senderName") || !urlData.containsKey("senderId"))
            throw new Exception("senderName or senderId missing");
        System.out.println("3");
        MultipartConfigElement multipartConfigElement = new MultipartConfigElement("/temp");
        System.out.println("3.1");
        request.raw().setAttribute("org.eclipse.jetty.multipartConfig", multipartConfigElement);
        System.out.println("3.2");
        Collection<Part> files = request.raw().getParts();
        System.out.println("3.3");
        if(files.size() == 0 || files.size() > 1){
            throw new Exception("No files or more than 1 file detected");
        }
        //Rest of the code...
    } catch (Exception e2){
        System.out.println(e2.getMessage());
        ret.addProperty("Error", e2.getMessage());          
    } finally {
        response.body(ret.toString());
        return response;
    }

因此,如您所见,我打印了某些步骤的日志。代码运行平稳,直到“3.2”,它开始从客户端设备传输文件。因此,完成传输需要一些时间,但是一旦完成上传(正如我使用 Android Studio 网络监视器所知道的那样),服务器在处理下一行并打印“3.3”之前还需要 3 到 4 分钟。其余代码也运行顺利,我终于可以在客户端获得响应。

所以,我的问题是为什么 request.raw().getParts() 最多需要 6 分钟,即使上传已完成。

最佳答案

听起来好像从Android端发送数据的应用程序在完成发送数据后没有关闭连接。

这将导致两端坐在那里什么也不做,直到其中一个读取超时触发。

您是自己在 Android 设备上编写代码,还是使用浏览器或某些第三方应用程序?

关于Java文件上传非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35323838/

相关文章:

java - JSP页面加载错误

java - 程序运行时从文件中读取数据并进行计算

java - 尝试在 Java 中的数组中创建 AddBefore 方法。不使用ArrayList

android - 约束布局 : Overlap ImageView on Toolbar and set image Height based on width by GuideLine

android - 如何在Android中添加自动评分栏

java - 在Web服务器中写入文件而不指定真实路径

java - 查找复选框是否在 servlet 中被选中

java - bean 定义未加载到 spring 上下文中

c# - 与 C# 服务器的 Android TCP 通信 -> socket.Close

android - 仅使用 CSS 在移动设备上水平和垂直居中显示 div