使用webkitDirectory和Java Servlet上传文件夹/子目录中的文件 [英] Upload files in folder/subdirectories using webkitDirectory and Java Servlet

查看:570
本文介绍了使用webkitDirectory和Java Servlet上传文件夹/子目录中的文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图用java后端实现一个文件上传功能。



Step1。使用webkitdirectory设计一个HTML表单

$ p $ lt; code>< form action =DataUploadmethod =postenctype =multipart / form-数据>
< input type =textname =dbNamevalue =Database Name Hereid =dbName/>
< input type =fileid =ctrlwebkitdirectory directory multiple />
< input type =submit/>
< / form>

步骤2.将信息从 form 传递给 Servlet

  public class DataUpload extends HttpServlet {
protected void doPost(HttpServletRequest请求,HttpServletResponse响应){

ServletFileUpload upload = new ServletFileUpload();
FileItemIterator fileIterator;
尝试{
fileIterator = upload.getItemIterator(request);
InputStream inputStream = null;
BufferedReader br = null;
System.out.println(CheckPoint 1);
while(fileIterator.hasNext()){
System.out.println(CheckPoint 2);
FileItemStream item = fileIterator.next();
String inputFileName = FilenameUtils.getName(item.getName());
inputStream = item.openStream();

inputFileName = inputFileName.split(\\。)[0];
List< String []> list = new ArrayList< String []>();
//获取文件
br = new BufferedReader(new InputStreamReader(inputStream)); //获取对象读取文件
String line; $(b行b = br.readLine())!=空){//条件结束,然后到达文件的结尾。
list.add(line.split(,));

//检查文件是否为空
if(list.size()== 0){
System.err.println(File Empty);
} else {
// TODO:Parameter Parser。
//请在这里执行

$ b $ catch(FileUploadException e){
// TODO自动生成的catch块
e.printStackTrace( );




$ b我的代码并没有给出任何编程错误,但它不会通过 CheckPoint 2 ,也就是说它不会进入循环。我试图找到各种职位,如:
$ b 保持上传时的目录结构

这个问题工程选择文件夹中的多个文件,这里的问题是问题是上传文件夹中的不同子目录中的文件。

我想知道,如果这是可能的只使用 java servlets 不使用 javascript 。我能够在一个文件夹中上传多个文件。但是,当我选择一个文件夹作为输入时,代码似乎不起作用,而是在我选择一个特定的文件或文件的一个子集时起作用。 方法

HTML文件格式

 < form onsubmit =readFiles()> 
< input type =filename =fileswebkitdirectory directory multiple id =files>
< input type =submit>
< / form>

JavaScript函数

  function readFiles(){
var files = document.getElementById(files)。files; (var file = 0; file< files.length; file ++){
var reader = new FileReader();
reader.onload = function(e){
var object = new Object();
object.content = e.target.content;
var json_upload =jsonObject =+ JSON.stringify(object);
var xmlhttp = new XMLHttpRequest(); //新的HttpRequest实例
xmlhttp.open(POST,http:// localhost:8080 / readFileServlet);
xmlhttp.setRequestHeader(Content-Type,application / x-www-form-urlencoded);
xmlhttp.send(json_upload);
}
reader.readAsBinaryString(files);




$ b $ p $ Java $函数

  JSONObject jObj = new JSONObject(request.getParameter(jsonObject)); 


I am trying to implement a file-upload functionality using webkitdirectory with java backend.

Step1. Design a HTML form with webkitdirectory

<form action="DataUpload" method="post" enctype="multipart/form-data">
<input type="text" name="dbName" value="Database Name Here" id="dbName"/>
    <input type="file" id="ctrl" webkitdirectory directory multiple/>
    <input type="submit" />
</form>

Step 2. Passing information from form to Servlet

public class DataUpload extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response){

    ServletFileUpload upload = new ServletFileUpload();
    FileItemIterator fileIterator;
    try {
        fileIterator = upload.getItemIterator(request);
        InputStream inputStream = null;
        BufferedReader br = null;
        System.out.println("CheckPoint 1");
        while(fileIterator.hasNext()) {
            System.out.println("CheckPoint 2");
            FileItemStream item = fileIterator.next();
            String inputFileName = FilenameUtils.getName(item.getName());
            inputStream = item.openStream();

            inputFileName = inputFileName.split("\\.")[0];
            List<String[]> list = new ArrayList<String[]>();                
            // Getting File
            br = new BufferedReader(new InputStreamReader(inputStream));    // Getting the object to read file
            String line;
            while((line = br.readLine())!= null){// While condition ends then end of file is reached.
                list.add(line.split(","));
            }
            // Checking if File is Empty
            if (list.size() == 0){
                System.err.println("File Empty");
            }else{
                // TODO : Parameter Parser.
                // DO JOB HERE
            }           
        }
    } catch (FileUploadException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

My code, doesn't give any programming error, but it does not pass through the CheckPoint 2, i.e. it doesn't go inside the while loop. I tried looking into various post, such as:

Keep Directory Structure When Uploading
How to upload files to server using JSP/Servlet? - While this question shows maximum resemblance to problem in question, This question works for selecting multiple files in a folder, where the problem here is question is to upload files in different sub directories inside a folder.

I was wondering, if this was possible using solely java servlets without using javascript. I was able to upload multiple files inside a single folder. But, code doesn't seem to work, when I select a folder as input, instead it works when I select a particular file or a subset of files.

解决方案

HTML File Form

<form onsubmit="readFiles()">
    <input type="file" name="files" webkitdirectory directory multiple id="files">
    <input type="submit">
</form>

JavaScript Function

function readFiles(){
    var files = document.getElementById("files").files;
    for (var file = 0 ; file < files.length; file++) {
        var reader = new FileReader();
        reader.onload = function(e){
            var object = new Object();
            object.content = e.target.content;
            var json_upload = "jsonObject=" + JSON.stringify(object);
            var xmlhttp = new XMLHttpRequest();   // new HttpRequest instance 
            xmlhttp.open("POST", "http://localhost:8080/readFileServlet");
            xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xmlhttp.send(json_upload);
        }
        reader.readAsBinaryString(files);
    }
}

Java Function:

JSONObject jObj = new JSONObject(request.getParameter("jsonObject"));

这篇关于使用webkitDirectory和Java Servlet上传文件夹/子目录中的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆