Как загрузить файл слова на клиентское устройство, используя ajax, javaScript и java? - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть несколько документов .docx, сохраненных в папке конфигурации моего модуля wildfly one.Эти файлы не включены в файл war, они сохраняются локально в отдельной папке / configuration / some.Я использую вызов ajax для вызова служб REST Java.В пользовательском интерфейсе у меня есть список тегов привязки с именами файлов, в основном список всех файлов .docx.Когда я нажимаю на имена, файл документа должен быть загружен.

Я не могу внести изменения в отдельный файл wildfly для списка каталогов, так как он небезопасен.Я попытался загрузить, сделав ajax-вызов сервису, который возвращал файлы как объект, но это не сработало.Я попытался вызвать службу, указав URL-адрес непосредственно в свойстве href тега привязки, не используя вызов ajax, но он не работает, я могу вызывать только остальные службы, хотя вызовы ajax.Кто-нибудь может дать мне другое решение?

этот код для другого подхода, который я попробовал, но он потерпел неудачу, я был триен, чтобы отправить данные файла docx во внешний интерфейс и сделать другой файл docx во внешнем интерфейсе, но это не такрешить проблему

javaScript: 1.

 success: function(data) {
            var issueisolatationhtml;
            if (data.output) {
                relatedSOPS = data.output;
                for (i = 0; i < relatedSOPS.length; i++) {
                    relatedSOPNames[i] = relatedSOPS[i].replace('.docx', '');
                    issueisolatationhtml = '<a href = "#" id="'+relatedSOPNames[i]+'" onclick="return forceDownloadSOP(this.innerHTML);" >'+relatedSOPS[i]+'</a></br>';
                    $('#diff-Sop-container').append(issueisolatationhtml);
                }
            }

2.

 function forceDownloadSOP(filename) {
console.log("parameters passed:\n filename: " + filename);
let fileData = "";
fileData = "";
downloadSOPData(filename);
console.log("fileData: ");
console.log(fileData);
var type = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";

downloadFile(returnedString, filename, type);
}

 function downloadFile(data, filename, type) {
console.log("passed parameters: ");
console.log(data);
console.log(filename);
console.log(type);
const a = document.createElement("a");
a.style.display = "none";
document.body.appendChild(a);
data = returnedString;
console.log("data assigned value of returnedString");
console.log(data);
a.href =  window.URL.createObjectURL( new Blob([data], { type }));
a.setAttribute("download", filename);

a.click();

window.URL.revokeObjectURL(a.href);
document.body.removeChild(a);
 }


 function downloadSOPData(filename) {
console.log("downloading " + filename);
$.ajax({
    url:"../eventmgmtrs/ticketFlow/downloadRelatedSOPS",
    data: {
        "filename" : filename
    },
    type:"get",
    async: false,
    success: function(responseData) {
        console.log(responseData);
        console.log("got response Data: " + responseData.output);
        downloadPath = responseData.path;
        console.log("DownloadPath: " + downloadPath);
        returnedString = responseData.output;
        console.log("returnedString assigned to : ");
        console.log(returnedString);
 //            return responseData.output;
    },
    error: function(error) {
        console.log("error while downloading");
        console.log(error);
    }
})

}

java:

  @GET
@Path("/downloadRelatedSOPS")
@Produces(MediaType.APPLICATION_JSON)
public Response downloadRelatedSOPS(@QueryParam("filename") String filename, @Context HttpServletRequest request) {
    System.out.println("downloadRelatedSOPS() called");
    System.out.println("Parameter passed: filename = " + filename);

    lOGGER.debug("Inside the downloadRelatedSOPS having filename: " + filename);

    JSONObject storeCfg = ConfigManager.getConfig(Names.CONFIG_SOP);
    System.out.println("storCfg created: " + storeCfg);
    String absoluteFilePath = (String) storeCfg.get(Names.SOP_REPO_PATH);
    System.out.println("absoluteFilePath: " + absoluteFilePath);
    JSONObject resultjson = new JSONObject();
    Response.Status status;

    try {
        File file = new File(absoluteFilePath + "/" + filename);
        FileInputStream fileInputStream = new FileInputStream(file.getAbsolutePath());

        XWPFDocument document = new XWPFDocument(fileInputStream);

        List<XWPFParagraph> paragraphs = document.getParagraphs();
        String str_data = "";
        for (XWPFParagraph para : paragraphs) {
            System.out.println("para: " + para.getText());
            str_data += para.getText();
            System.out.println("str_data: " + str_data);
        }
        System.out.println("data: " + str_data);
        resultjson.put(Names.OUTPUT, str_data);
        resultjson.put("path", absoluteFilePath + "/" + filename);
        status = Response.Status.OK;
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("catch error");
        lOGGER.error("ERROR : Exception occurred while fetching SOPS" + e);
        resultjson.put(Names.ERROR_MESSAGE, "Error fetching SOPS");
        status = Response.Status.INTERNAL_SERVER_ERROR;
    }
    return Response.status(status)
            .header(Names.ACCESS_CONTROL_ALLOW_ORIGIN, "*")
            .header(Names.ACCESS_CONTROL_ALLOW_METHODS, "GET")
            .entity(resultjson).build();

}

Ожидаемый результат в том, что файлы, находящиеся в этой локальной папке, должны быть загружены.и браузер должен разрешить загрузку.

...