Java 如何最好地配置用户上载支持文件的上载位置
问题:我的基于java的软件产品具有将支持文件创建为zip文件的功能,如果用户有问题,我会要求他们向我发送电子邮件或使用dropbox之类的工具上载文件。问题是,支持文件通常太大,无法通过电子邮件发送,而且对于某些用户来说,使用dropbox之类的工具很困难 我有一个支持ftp的服务器(运行ApacheTomcat),因此我可以让用户简单地上传文件,但它需要用户名和密码。在应用程序中嵌入用户名和密码肯定不是一个好主意,也许我可以配置一个不需要用户名/密码的位置,但是如何保护用户数据不受其他用户的影响 上传支持文件是许多应用程序的标准行为,但我不清楚如何最好地实现这一点。简而言之 您希望为用户创建一个密码保护目录,以便通过ftp上载内容 有一篇关于这个问题的好文章 我在这里引用基本步骤Java 如何最好地配置用户上载支持文件的上载位置,java,tomcat,file-upload,upload,dropbox,Java,Tomcat,File Upload,Upload,Dropbox,问题:我的基于java的软件产品具有将支持文件创建为zip文件的功能,如果用户有问题,我会要求他们向我发送电子邮件或使用dropbox之类的工具上载文件。问题是,支持文件通常太大,无法通过电子邮件发送,而且对于某些用户来说,使用dropbox之类的工具很困难 我有一个支持ftp的服务器(运行ApacheTomcat),因此我可以让用户简单地上传文件,但它需要用户名和密码。在应用程序中嵌入用户名和密码肯定不是一个好主意,也许我可以配置一个不需要用户名/密码的位置,但是如何保护用户数据不受其他用户的
我与他们没有任何关联您的用户只需要上传一个支持文件,他们不需要(您也不希望他们)在上传后查看它,更不用说其他用户发送的其他文件了。所以我建议不要使用FTP 相反,您可以在Tomcat中部署一个简单的应用程序,使用一个简单的servlet来接受通过HTTPPOST上传的文件。这就解释了如何开发这样一个servlet(忽略不适用于您的“简介”段落,但阅读其余部分)。servlet只需要回复类似“支持文件上传,票证号为12345,谢谢”。servlet应该受到保护,最低限度是只接受上载以及与应用程序一起分发的令牌 在这个servlet中,您需要将文件保存在一个适当的位置(由同一作者)来决定。在您的情况下,最简单的方法是将其保存在Tomcat不提供服务的位置,这样只有您可以使用SSH在服务器上收集它们。或者,您可以将文件保存到受保护的位置,以便您可以查看和下载文件,而不是您的用户(因此您只需要1个密码,而不是您的用户) 假设servlet 3.1需要Tomcat 8的工作示例,如果您在较旧的Tomcat版本上需要此选项,请参阅链接答案以了解详细信息:
import javax.servlet.ServletConfig;
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;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.UUID;
@MultipartConfig // So you can call getPart(...) in doPost(...)
public class SupportFileUpload extends HttpServlet {
private String uploadDirectory;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
// Configure location with <init-param> in web.xml
uploadDirectory = config.getInitParameter("upload_directory");
if (uploadDirectory == null) {
uploadDirectory = System.getProperty("java.io.tmpdir");
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String token = request.getHeader("token");
if (!isValid(token)) {
response.setStatus(403);
response.getWriter().println("Rejected");
return;
}
Part filePart = request.getPart("file");
String fileName = filePart.getSubmittedFileName();
UUID uuid = UUID.randomUUID();
filePart.write(Paths.get(uploadDirectory, "support_" + uuid + "_" + fileName).toString());
response.getWriter().println("Uploaded: " + uuid);
}
private boolean isValid(String token) {
return "plzhalp".equals(token); // Implement tight security here
}
}
import javax.servlet.ServletConfig;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.MultipartConfig;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入javax.servlet.http.Part;
导入java.io.IOException;
导入java.nio.file.path;
导入java.util.UUID;
@MultipartConfig//因此您可以在doPost(…)中调用getPart(…)
公共类SupportFileUpload扩展了HttpServlet{
私有字符串上传目录;
@凌驾
public void init(ServletConfig config)抛出ServletException{
super.init(config);
//在web.xml中使用配置位置
uploadDirectory=config.getInitParameter(“upload_目录”);
if(uploadDirectory==null){
uploadDirectory=System.getProperty(“java.io.tmpdir”);
}
}
@凌驾
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
String token=request.getHeader(“token”);
如果(!isValid(令牌)){
答复:setStatus(403);
response.getWriter().println(“拒绝”);
返回;
}
Part filePart=request.getPart(“文件”);
字符串文件名=filePart.getSubmittedFileName();
UUID UUID=UUID.randomUUID();
write(path.get(uploadDirectory,“support_uid+“uid+”+fileName).toString());
response.getWriter().println(“上传:+uuid”);
}
私有布尔值isValid(字符串标记){
返回“plzhalp”.equals(token);//在这里实现严格的安全性
}
}
将上载的部分写入磁盘是一种方便的方法
在客户端,您可以使用上载文件。谢谢,这听起来是个明智的方法