1

大家好,我手头有一个严重的问题,我在客户端机器上有一个 zip 文件,我需要将该 zip 文件上传到特定位置的服务器机器上,客户端机器会自动创建快照的 zip 文件并应该上传该 zip 文件以编程方式在特定位置的服务器上,并且两者之间没有任何用户交互,任何人都可以建议如何执行此任务。我需要为此编写一个java代码。我已经尝试了几个演示文件上传的链接,但没有一个能够达到我的目的。

提前致谢。

4

2 回答 2

1

您可以在客户端中使用Apache HttpComponents,您可以找到许多示例以使客户端能够将文件作为多部分发布 http 请求上传。

然后你必须创建一个简单的 servlet 能够以流的形式接收文件。为了帮助您实现 servlet,您可以使用另一个库:Apache Commons FileUpload

于 2012-10-04T08:08:37.450 回答
1

使用 Servlet 3.0 API 在多部分帖子中接收和保存文件,无需使用任何外部库。:

首先,您必须通过启用多部分的“发布”上传文件,因为这是上传大文件的更方便的方式。您必须命名“部分”“文件”。每个部分都有标题。代码读取标题以使用原始文件名或根据上传时间设置一个。该代码编写了一个简单的文本来确认上传请求。

import java.io.IOException;
import java.io.PrintWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

@MultipartConfig
public class UploadServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        Part part = request.getPart("file");

        Matcher m = Pattern.compile("filename=\"(.*)\"", Pattern.CASE_INSENSITIVE).matcher(
                part.getHeader("content-disposition"));
        String filename;
        if (m.find()) {
            filename = m.group(1);
        } else {
            filename = "upload" + System.currentTimeMillis();
        }
        part.write("C:/path/" + filename);
        out.println("File '" + filename + "' uploaded.");
    }
}
于 2012-10-04T08:38:40.660 回答