Как загрузить ZIP-файл с помощью Java? - PullRequest
3 голосов
/ 11 ноября 2010

Я пытаюсь загрузить ZIP-файл. В моем проекте я использую DWR на стороне клиента и Java на стороне сервера. Как я видел в руководствах по DWR для загрузки данных (их нет на их веб-сайте. Они предоставляют его с пакетом dwr.rar), они получают данные по следующим строкам.

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

dwr.util.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-файл как InputStream.

Как мне нужно написать a InputStream (zip-файл) в zip.file используя Java?

Что будет, если я установлю Java параметр метода как ZipFile file? я еще не пробовал, потому что я все еще ищу хороший учебник узнать об этом.

Любое предложение или ссылки будут более благодарны !!!!! Заранее спасибо !!!

Ответы [ 2 ]

2 голосов
/ 12 ноября 2010

Вот 2 примера создания файла ZIP:

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

Пример чтения файла ZIP:

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

0 голосов
/ 15 февраля 2019

Я также реализовал тот же самый вид внутреннего кода в Java, и я столкнулся с той же проблемой создания файла Zip, но его содержимое было пустым.

Позже я обнаружил, что запрос выполнялк API, в котором файл, который я прикреплял, был не в формате --data-binary.Итак, я сделал запрос в этом формате.

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

Я не уверен, какой формат запроса вы делаете в кодировке multipart/form-data или Base-64.

Мой код работалкогда я сделал запрос в кодировке Base-64 (т.е. --data-binary)

...