【问题标题】:How to get Uploaded filename in java servlet?如何在 java servlet 中获取上传的文件名?
【发布时间】:2016-09-19 20:30:14
【问题描述】:

我有这个:

public void doPost(HttpServletRequest request, 
      HttpServletResponse response) throws IOException, ServletException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    try{
        sentfilename = printNames(request);
        MultipartRequest multipartRequest = new MultipartRequest(request, ImageDirecoty, 1024*1024*5);
    } catch(IOException e){
        response.sendError(HttpServletResponse.SC_CONFLICT, "File limit has exceeded or it wasn't an actual image");
        System.out.println(e.getMessage());
        return;
    }
}

public String printNames(HttpServletRequest request) throws IOException, ServletException{
        for(Part part : request.getParts()){
            Collection<String> headers = part.getHeaders("content-disposition");
            if (headers == null)
                continue;
            for(String header : headers){
                String filename = header.substring(header.indexOf("filename=") + 10 , header.length());
                String result = filename.replace("\"", "");
                return result;
            } 
        }
        return null;
}

基本上我是从客户端上传一个简单的文件,现在我需要从可以通过printNames函数成功获取的请求数据中获取文件名并将请求数据写入我的filepath,现在问题是正如您在我的doPost() try 中看到的那样,如果我首先输入printNames 函数,我可以获得文件名,但它不会写入数据,如果我首先输入MultipartRequest,我可以获得文件上传,但我没有得到文件名。

希望不要造成任何混乱并提前感谢

【问题讨论】:

    标签: java servlets


    【解决方案1】:

    您可以从零件对象本身获取它

    String fileName = part.getSubmittedFileName();

    示例:

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Deque<FileInfo> files = new LinkedList<>();
        for (Part part : req.getParts()) {
            long fileSize = part.getSize();
            String fileName = part.getSubmittedFileName();
            if (fileSize == 0 && (fileName == null || fileName.isEmpty())) {
                continue; // Ignore part, if not a file.
            }
            FileInfo info = new FileInfo(UUID.randomUUID(), fileSize, fileName, part.getContentType());
    
            files.add(info);
            Files.copy(part.getInputStream(), new File(uploads, info.getId().toString()).toPath());
        }
    
        req.getSession().setAttribute("uploadedFiles", files);
        resp.sendRedirect(applicationUrl + "/upload");
    }
    

    来源:http://ursaj.com/upload-files-in-java-with-servlet-api

    希望对您有所帮助!

    【讨论】:

    • 你在哪里打电话给MultipartRequest()
    • 使用 servlet-api 3.1,您可以简单地注释 servlet 类 @WebServlet ... @MultipartConfig( fileSizeThreshold = 16768, maxRequestSize = 10L * 1024 * 1024, maxFileSize = 10L * 1024 * 1024 )
    • 不知怎的,这对我不起作用,我不得不使用 MultipartRequest() 本身,你有什么想法用 MultipartRequest() 来做吗
    • 我想我现在需要更多信息。很难理解你想要达到的目标。如果您能提供更多详细信息,那就太好了:使用的技术、版本、配置文件等。
    • 我只想在保存上传的文件之前从客户端发送的multipartRequest 中获取文件名。
    猜你喜欢
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 2017-01-12
    • 2016-04-07
    • 1970-01-01
    相关资源
    最近更新 更多