Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > отправка пользователю бинарных данных из сервлета


Автор: Alexandr87 10.8.2006, 06:26
Т.е. мне нужно чтобы пользователь мог запросить у сервлета бинарные данные, которые хранятся в базе, но пользователь должен их получить - будто просто скачивает файл с сервера.

Можно конечно создавать временные файлы и давать ссылку на них, но хотелось бы сделать чтобы без них. 

Автор: tux 10.8.2006, 06:46
Можно и без временных файлов. Например, для doc-файлов код сервлета будет выглядеть примерно так:
Код

byte[] documentContent;
...
response.setContentType("application/msword");
OutputStream stream = response.getOutputStream();
response.setHeader("Content-Disposition", "inline; filename=\"" + "filename.doc" + "\"");
stream.write(documentContent);
...

И кинуть ссылку на этот сервлет пользователю. Естественно, если файлы большие, то для чтения контента из БД лучше использовать потоки, а не массив байтов как здесь. "Content-Disposition" задает имя файла, которое появится в диалоге сохранения/открытия файла.

Автор: Alexandr87 10.8.2006, 07:01
спасибо большое - то, что нужно. Ты помогаешь настолько часто, что мне уже не разрешают повышать репутацию - но завтра будет новый день - тогда и повышу.

Еще раз большое спасибо.

Автор: FcUK 22.6.2007, 18:32
Возникла небольшая проблема....Есть struts 1.3.8 веб аппликуха...
она содает xls файл на файловой системе(допустим в C:\temp)... После создание у пользователя должена быть возможность скачать етот файл.
Я тут посмотрел по форуму и в гугле - везде предлогают на jsp странице создать линк на Action  в котором и реализовать ету загрузку файла.
Action у меня получился вот такой...
Код

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;


public class ExampleFileDownload extends Action{

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception{
        response.setContentType("application/vnd.ms-excel");
        response.setHeader( "Content-disposition ", "attachment; filename= " + "C:\\temp\\ReportTemplate.xls");
        return mapping.findForward("success");
    }
}



и почемуто он  в конце предлогает для сохранения/открытия не C:\\temp\\ReportTemplate.xls а какойто файл с названием downloadXLSFile. Открыть еот файл не получаетса...

Плз, укажите в чем моя ошыбкаsmile
спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)