Скачивание файла с помощью JSF

Привет, я пытаюсь загрузить файл с сервера, но в конце моего процесса я получаю только числа и некоторые странные символы в моем браузере. Это не загружает файл. Я использую шов и JSF 1.2.

Вот мой код:

public void writeBytesToResponse(UploadDefinition _instance, String path) {

    FacesContext context = FacesContext.getCurrentInstance();
    HttpServletResponse response = (HttpServletResponse) context .getExternalContext().getResponse();

    try {
        byte[] bytes = getFile(path);
        response.reset();
        response.setContentType(ContentType.PDF.getLabel());
        response.setContentLength(bytes.length);
        response.setHeader("Content-disposition", "attachment; filename=\"" + _instance.getFileName() + "\"");
        OutputStream outputStream = response.getOutputStream();
        outputStream.write(bytes);
        outputStream.flush();
        outputStream.close();
        context.responseComplete();
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}
@SuppressWarnings("resource")
public byte[] getFile(String filePath) throws FileNotFoundException, IOException {
    File file = new File(filePath);
    InputStream is = new FileInputStream(file);
    long length = file.length();

    if (length > Integer.MAX_VALUE) {
        throw new IOException("File is too large " + file.getName());
    }

    byte[] bytes = new byte[(int) length];
    int offset = 0;
    int numRead = 0;

    while (offset < bytes.length && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {
        offset += numRead;
    }

    if (offset < bytes.length) {
        throw new IOException("Could not completely read file " + file.getName());
    }

    is.close();
    return bytes;
}

Здесь я называю метод:

public void downloadFile() {
    writeBytesToResponse(ud, path);
}

person Burak Akdeniz    schedule 24.12.2014    source источник
comment
Возвращает ли этот метод ContentType.PDF.getLabel() правильный тип носителя, такой как application/pdf (ваш интерес)? Смотрите также для справки Это и Это.   -  person Tiny    schedule 24.12.2014
comment
Да, он возвращает application / pdf.   -  person Burak Akdeniz    schedule 24.12.2014


Ответы (1)


Я получил ответ, я использовал <a4j:commandButton> в jsf и изменил его на <h:commandButton>, после чего это сработало. Дело не в том, чтобы использовать ajax.

person Burak Akdeniz    schedule 24.12.2014