大家好,我手头有一个严重的问题,我在客户端机器上有一个 zip 文件,我需要将该 zip 文件上传到特定位置的服务器机器上,客户端机器会自动创建快照的 zip 文件并应该上传该 zip 文件以编程方式在特定位置的服务器上,并且两者之间没有任何用户交互,任何人都可以建议如何执行此任务。我需要为此编写一个java代码。我已经尝试了几个演示文件上传的链接,但没有一个能够达到我的目的。
提前致谢。
您可以在客户端中使用Apache HttpComponents,您可以找到许多示例以使客户端能够将文件作为多部分发布 http 请求上传。
然后你必须创建一个简单的 servlet 能够以流的形式接收文件。为了帮助您实现 servlet,您可以使用另一个库:Apache Commons FileUpload
使用 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.");
}
}