代码之家  ›  专栏  ›  技术社区  ›  user405398

如何使用Java上传zip文件?

  •  3
  • user405398  · 技术社区  · 15 年前

    我想上传一个zip文件。在我的项目中,我在客户端使用DWR,在服务器端使用Java。正如我在DWR上传数据教程中看到的那样(不在他们的网站上)。他们正在为它提供dwr.rar包)他们从下面几行得到输入。

    var image = dwr.util.getValue('uploadImage');
    var file = dwr.util.getValue('uploadFile');
    var color = dwr.util.getValue('color');
    

    getValue()是一个获取任何元素值的实用程序,在本例中是一个文件对象。//。

    所以,我通过下面的代码使用该实用程序得到一个zip文件。

    Javascript代码:

    function uploadZip(){
    var file = dwr.util.getValue("uploadFile");
    dwr.util.setValue("uploadFile", null);
    DataUpload.uploadData(file, function(data){
        if(data != null){
            $("#zipURL").html("<p>Upload Completed!!!</p>");
            $("#zipURL").append("Location: "+data.path2);
        }
    });
    }
    

    HTML格式:

    <html>
    <head>ZIP Uploader
    </head>
    <body>
    <table>
    <tr><td>Select File: </td><td><input type="file" id="uploadFile" /></td>
    <tr><td><input type="button" value="Upload" onclick="uploadZip()" /></td></tr>    </table>
    <div id="result"><span id="imgURL"></span>
    <span id="zipURL"></span></div>
    </body>
    </html>
    

    Java代码是:

    public class DataUpload {
    private static String DATA_STORE_LOC = "D:/BeenodData/Trials/";
    
    public Path uploadData(InputStream file) throws IOException{//In the tutorial the 
              //parameters are in type of BufferedImage & String. 
              //They used it for image and text file respectively.
              //In an another example(out of DWR site) they used InputStream for receiving
              //image
    
        try {
        byte[] buffer = new byte[1024];
        int c;
        File f2 = new File(DATA_STORE_LOC+dat+".zip");
        path.setPath2(DATA_STORE_LOC+dat+".zip");
        FileOutputStream fos = new FileOutputStream(f2);
        c = file.read();
        System.out.println(c);
        while ((c = file.read()) != -1) {
            fos.write(c);
             }
        file.close();
        fos.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return path;
    
    }
    

    此代码运行无误。但是输出是一个空的zip文件。我知道我做错了什么。我找不到。

    实际上,我收到一个zip文件 输入流。

    我该怎么做 一 输入流(一个zip文件)到一个zip.file 使用java?

    如果我设置java 方法参数为 ZipFile file ? 我 还没试过,因为,我 仍然在寻找一个好的教程 了解它。

    任何建议或链接将更加感激!!!!! 提前谢谢!!!

    2 回复  |  直到 15 年前
        1
  •  2
  •   Dalmas    14 年前

    这里有两个创建ZIP文件的示例:

    http://www.java2s.com/Tutorial/Java/0180_ File/0601 _ZipOutputStream.htm

    下面是有关读取ZIP文件的示例:

    http://www.kodejava.org/examples/334.html

        2
  •  0
  •   Manish Kumar    7 年前

    我也在Java中实现了同样的后端代码,我也面临着同样的问题,即Zip文件的生成,但是它的内容是空的。

    后来我发现我向API发出的请求,因为我附加的文件不在 --data-binary 格式。所以,我用这种格式提出了请求。

    curl --data-binary @"/mnt/c/checknew.zip" http://localhost/api/upload
    

    我不确定你的请求格式 multipart/form-data Base-64 编码的。

    当我发出Base-64编码的请求(即 --数据二进制 )