Java File Downloader - PullRequest
       6

Java File Downloader

1 голос
/ 26 февраля 2020

Я создал сервлет для загрузки файлов с файлового сервера java. Вот некоторая проблема, когда мы работаем с Inte rnet менеджером загрузки и другими инструментами менеджера dl. когда я отключаю принимать заголовок диапазона все работает нормально. Когда я добавляю заголовок диапазона принятия, инструменты менеджера dl начинают загрузку как многопоточную, и на некоторое время все в порядке, и вдруг IDM получает ошибку, и загрузка начинается с самого начала. вот мой код:

import commons.Commons;
import commons.Log;
import commons.Util;
import db.dao.PublicShareDao;
import entity.*;
import enums.MimeType;
import io.OSWorker;
import io.milton.common.FileUtils;
import io.milton.common.StreamUtils;
import io.milton.http.Range;
import org.apache.http.HttpHeaders;
import org.apache.poi.util.IOUtils;

import javax.servlet.SingleThreadModel;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.HttpMethod;
import java.io.*;
import java.net.URLEncoder;

@WebServlet(name = "PublicDownloader" ,value = "/public/download")
public class PublicDownloader extends HttpServlet implements SingleThreadModel {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) {

        InputStream is = null;
        try {

                User owner = (User) resultItem.getData();
                OSWorker osWorker = new OSWorker(owner.getMount());
                ItemPath publicSource = new ItemPath(owner, publicShare.getLocalPath());
                if (osWorker.exists(publicSource).isSuccess()) {
                    resultItem = osWorker.getFile(publicSource);
                    if (resultItem.isSuccess()) {
                        FileItem outfile = (FileItem) resultItem.getData();
                        String mimeType = outfile.getContenttype().getMimeType();
                        String displayName = URLEncoder.encode(new String(outfile.getItemPath().getFileName().getBytes("UTF-8")), "UTF-8");


                        if (request.getMethod().equals(HttpMethod.HEAD)) {
                            response.setContentType(outfile.getContenttype().getMimeType());
                            response.setHeader(HttpHeaders.CONTENT_LENGTH, String.valueOf(outfile.getLength()));
                            response.setHeader("Display-Name", URLEncoder.encode(new String(outfile.getItemPath().getFileName().getBytes("UTF-8")), "UTF-8"));
                            response.setHeader(HttpHeaders.LAST_MODIFIED, outfile.getLastmodified().toString());
                            response.setStatus(200);
                            return;
                        } else {



                                    response.setContentType(outfile.getContenttype().getMimeType());
                                    if (!preview)
                                        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(new String(outfile.getItemPath().getFileName().getBytes("UTF-8")), "UTF-8"));
                                    is = osWorker.getContent(publicSource);
                                    response.setHeader(HttpHeaders.CONTENT_LENGTH, String.valueOf(outfile.getLength()));
                                    if (is != null) {

                                        OutputStream os = response.getOutputStream();
                                        long readed = org.apache.commons.io.IOUtils.copyLarge(is, os);
                                        response.setHeader(HttpHeaders.CONTENT_LENGTH, String.valueOf(readed));
                                        os.flush();
                                        FileUtils.close(is);
                                        FileUtils.close(os);
                                        response.setStatus(200);
                                        return;
                                    }else {
                                        response.setStatus(501);
                                        return;
                                    }


                        }
                    }else {
                        response.setStatus(500);
                        return;
                    }
                } else {
                    response.setStatus(404);
                    return;
                }

        } catch (IOException io) {
            if (io.getMessage().contains("An existing connection was forcibly closed by the remote host")) {
            } else if (io.getMessage().contains("An established connection was aborted by the software in your host machine")) {
            } else if (io.getMessage().contains("Connection reset by peer")) {
            } else if (io.getMessage().contains("Broken pipe")) {
            } else {
                FileUtils.close(is);
                Log.errorLog(io);
            }
            response.setStatus(500);
            return;
        } catch (Exception ex) {
            Log.errorLog(ex);
            response.setStatus(500);
            return;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...