2013-07-22 3 views
0

Я пытаюсь отправить CSV-данные клиенту.Отправка файла клиенту Java-игра

Вот как я продолжаю: Клиентская сторона: ajax вызов на сервер, чтобы получить файл.

$.ajax({ 
    url:"/csv/"+source, 
    method:'post', 
    data:JSON.stringify(json), 
    contentType: "application/json; charset=utf-8" 
}); 

Сторона сервера: сгенерируйте файл, а затем отправьте его клиенту.

File file = CSVGenerator.generateFromJson(source, request().body().asJson()); 
    response().setHeader("Content-Lenght", String.valueOf(file.length())); 
    response().setHeader("Content-Disposition", "attachment; filename=\""+file.toString()+"\""); 
    return ok(file).as("text/csv"); 

Я пробовал много возвратов. например, я попытался это:

return ok(new FileInputStream(file)).as("text/csv"); 

Я также пробовал много заголовков, как:

response().setContent("text/csv"); 

или

response().setHeader("Content-Type","text/csv"); 

вместо .as("text/csv")

клиент получит ответ с хорошим заголовок, хорошие данные, но никогда не запускайте загрузку.

Что мне не хватает?

+0

@EoiFirst Вы должны написать название языка, как это означало быть написано. Точно так же, как вы сделали бы для человека имя, бренд или что-нибудь еще. С учетом сказанного, что происходит на клиенте? Единственное, что я вижу, это то, что 'Content-Length' написано неправильно. –

+0

Спасибо за подсказку. Правильно написано о длине, но ничего не меняет. На клиенте ничего не происходит. Я вижу, что ответ в порядке, но загрузка не начинается – EoiFirst

+0

Что же касается просто: 'return ok (file);', вы попробовали это? – Aerus

ответ

0

После нескольких часов исследований, проблема заключается в том, что загрузка не может начинаться с вызова ajax.

Вот как я решил эту проблему:

Спасибо за помогает:

window.open("/csv/"+source+"/"+encodeURIComponent(csvData)); 
Смежные вопросы