Java 是否可以使用HTTP POST下载文件?

Java 是否可以使用HTTP POST下载文件?,java,javascript,ajax,http,Java,Javascript,Ajax,Http,是否可以使用HTTP POST下载文件? 我知道“获取”方式(windows.location),但在我的情况下,有很多参数应该传递给服务器是的,POST请求的其余部分可以引导浏览器下载文件。文件内容将作为HTTP响应发送,与GET的情况相同。除了请求方法和向服务器发送数据的方式之外,没有区别。无论使用GET还是POST,处理响应的方式都是相同的。从某种意义上说,每个HTTP GET或POST都是“下载文件”,但最好将其视为消息负载,而不是文件。在大多数情况下,负载是一个HTML文档,浏览器应将

是否可以使用HTTP POST下载文件?
我知道“获取”方式(windows.location),但在我的情况下,有很多参数应该传递给服务器

是的,POST请求的其余部分可以引导浏览器下载文件。文件内容将作为HTTP响应发送,与GET的情况相同。

除了请求方法和向服务器发送数据的方式之外,没有区别。无论使用GET还是POST,处理响应的方式都是相同的。

从某种意义上说,每个HTTP GET或POST都是“下载文件”,但最好将其视为消息负载,而不是文件。在大多数情况下,负载是一个HTML文档,浏览器应将其呈现为网页。但如果它不是HTML文档呢?如果它是一个zip文件,浏览器应该为用户提供一个“另存为”对话框,该怎么办?显然,浏览器必须确定响应的内容类型并正确处理

浏览器确定内容类型的最常见方式之一是通过一个相应地称为“内容类型”的方法。此标头采用mime类型的值。这是浏览器执行特定内容操作的关键,例如当响应包含pdf文件时启动acrobat插件等


注意,并非所有浏览器1)以相同的方式确定内容类型,2)以相同的方式响应内容类型。有时,您必须通过设置标题来从所有浏览器中获取所需的行为。所有服务器端技术都允许您设置HTTP头。

看起来您希望从Javascript生成POST请求。我认为没有办法让浏览器将AJAX请求的结果视为下载。即使内容类型设置为浏览器通常作为下载提供的内容(例如“应用程序/八位字节流”),浏览器也只会将数据存放在XMLHttpRequest对象中

此外,正如您可能已经知道的,没有办法使window.open()发出POST请求

我认为最好的方法是发出AJAX请求,在服务器上生成一个文件。在浏览器上,当请求完成时,使用window.open()下载生成的文件。

您的意思是这样吗

    function IssuePostRequest(objData) 
    {
        var strPageURL = "about:blank";
        var strAction = "@Url.Action("GetPDF", "Home")/";
        //var strAction = "/popups/delete.aspx";

        var strWindowName = "MyEvilHttpPostInAnewWindow"; // ifrmDownload
        var iWindowWidth = 805;
        var iWindowHeight = 625;



        var form = document.createElement("form");
        form.setAttribute("id", "bla");
        form.setAttribute("method", "post");
        form.setAttribute("action", strAction);
        form.setAttribute("target", strWindowName);
        form.setAttribute("style", "display: none;");
        // setting form target to a window named 'formresult'


        // Repeat for all data fields
        var hiddenField = document.createElement("input");
        hiddenField.setAttribute("name", "data");
        hiddenField.setAttribute("value", objData);
        form.appendChild(hiddenField);
        // End Repeat for all data fields


        document.body.appendChild(form);



        // creating the 'formresult' window with custom features prior to submitting the form
        //window.open(test.html, 'formresult', 'scrollbars=no,menubar=no,height=600,width=800,resizable=yes,toolbar=no,status=no');
        //JS_PopupCenterScreen(strPageURL, strWindowName, iWindowWidth, iWindowHeight);
        window.open(strPageURL, strWindowName);

        // document.forms[0].submit();
        //document.getElementById("xxx").click();
        form.submit();
    } // End Function IssuePostRequest
使用此服务器代码:

    public FileResult GetPDF(string data)
    {
        //data = @"data:image/png;base64,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";

        string base64Data = System.Text.RegularExpressions.Regex.Match(data, @"data:image/(?<type>.+?),(?<data>.+)").Groups["data"].Value;
        byte[] binData = Convert.FromBase64String(base64Data);

        byte[] ba = PdfHandler.ImageToPdf(binData);
        //System.IO.File.WriteAllBytes(@"d:\temp\myba.pdf", ba);

        //return System.Convert.ToBase64String(ba);
        return File(ba, "application/pdf", "Chart.pdf");
    }
publicfileresult GetPDF(字符串数据)
{
//数据=@"数据:图片/png;base64,IVBorW0KggoaaaAnsuhueugaaaaaaaaaaaa8Cayaaacz1L+0AaabHncSvqicagifahkiaabL0RvH0U29MdhcMuad3LmLua3NjyxBlm9Yz5VupboaaauhsurbH7Zx5Kbt1FCC/R2F2ehzQdQd9IvBadirogrowAbxCokhaIvB4ScraqUqujGjOb9WcWqWf3L7Tv7Tv7Lf7Lf7Lv7Wf7W7W7Wf7Wf7W7Wf7W7W7W7W7W9W7W7W7W7W9W7W9W9W9W9W9W9W9W7W9W9W9W9W9W9W92.在2 2 8年的研究中,2 2 2 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 NQRTLOCJZ2.一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,或者一种新的研究,一种新的研究方法,一种新的研究方法,一种新的研究,一种新的一种新的研究,一种新的一代的研究,一代的一代的一代的一代的研究成果,新的一代中国中国中国的一代中国政府的一个新一代中国中国中国中国中国的中国的中国的中国的中国中国的中国的一代中国中国的中国的中国6六六六六六六六六六六六六六六六个六个六个六个六个六个六个六个六个中国的中国的05T73M3FPAU1IWLCUJZ3C0xLPM5GRW1+1+1+1+5+5+5+1+5+5+1+5+5+5+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+2+1+2+1+1+1+1+1+1+1+1+1+1+2+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1/2+1+1/2+1/2+1/2+1/2+1/2+1/2+1/2+1/2+1/2+2+2+1/2+2+2+2+2+2+2+2 X0FGPSKFU9LS7NF+qAMFcm8Rr2.一份研究报告提交了一份研究报告,并给出了一份研究报告,一份研究报告,一份研究报告,一份研究报告,一份研究报告,一份研究报告,一份研究报告,一份研究报告,一份研究报告,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,j34fm5ZCiKB4o/N4.在一份研究报告中,一份研究报告中,一份研究报告中的一份研究报告中的一份研究报告中的一份研究报告中的一份研究报告中的两份研究报告中的两份研究报告中的一份研究报告中的两份研究报告中的一份研究报告中的一份研究报告中的一份研究报告中的一份研究报告中的一份研究报告中的一份研究报告中的两份研究报告中的两份研究报告中的两份研究报告中的两份研究报告中的两份研究报告中的两份研究报告中的两份研究报告中的两份研究报告中的两份研究报告中的两份研究报告中的两份是关于一份研究的两份研究报告中的两份研究报告中的两份研究报告中的两份研究报告中的两份研究报告中的两份研究内容的两份研究内容是:一份研究内容,两份研究的两份研究的两份研究报告中的两份研究内容是:一份/HIrqSftyacKao/eGg//2.中国古代古代古代古代古代古代古代古代古代古代古代中国古代古代古代古代古代古代中国古代古代古代古代中国古代古代古代中国古代古代古代古代中国古代古代古代中国古代古代古代中国古代古代古代中国古代古代中国古代中国古代中国古代古代古代中国古代古代中国古代古代中国古代古代中国古代古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国古代中国YQUCK9T4DPAGTPJCPFHA35.6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 LJ2H8LHMWncx2.目前,w3-xw/ww3-w3-w3-w3-w3-xw/w3-w3-w3-w3-xw/w3-w3-w3-w3-w3-w3-w3-w3-w3-w3-w3-w3-w3-w3-w3-w3-w3-w3-w3-w3-w6-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-6-10-10-10-10-10-10-10-10-10-10-6-6-10-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-KZSRQMAVDSHUF2YJZHXWAGE(2)这两个词的意思是:2+k9M+nW+MXW4+4+WWW4-QQQQQQQQQQQQQQQQQQQQQQQGGGGGGGGGGWW4+W9+nW+nW+nW+MXW4+MW4+W4+W4+W4+W4+W4+W4+W4+W4-QQQQQQQQGGGGGWWWWWW4-QQQQQQQQQQQQQQQQQQWWWWWWWW4-QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQWWWWWWW4+4+4-QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQVWUMD4BHM1E3DESBVTXMYLVSBJEWDG9YNEWFRTW3LYYWZCWWMH83HSU6FNACP4H8S84LI62/
downloadExcel : function() {
    var mapForm = document.createElement("form");
    mapForm.target ="_self"||"_blank";
    mapForm.id="stmtForm";
    mapForm.method = "POST";
    mapForm.action = "your_Controller_URL";

    var mapInput = document.createElement("input");
    mapInput.type = "hidden";
    mapInput.name = "Data";
    mapForm.appendChild(mapInput);
    document.body.appendChild(mapForm);

    mapForm.submit();
}
@Controller

@PostMapping(value = "/your_Controller_URL")
    public void doDownloadEmsTemplate( final HttpServletRequest request, final HttpServletResponse response)
            throws IOException, URISyntaxException {

        String filePath = "/location/zzzz.xls";
        logger.info("Excel Template File Location Path :" + filePath);
        final int BUFFER_SIZE = 4096;
        ServletContext context = request.getServletContext();
        String appPath = context.getRealPath("");
        String fullPath = appPath + filePath;
        File downloadFile = new File(fullPath);
        FileInputStream inputStream = new FileInputStream(downloadFile);
        String mimeType = context.getMimeType(fullPath);
        if (mimeType == null) {
            //mimeType = "application/octet-stream";
            mimeType = "application/vnd.ms-excel";
        }
        logger.info("MIME type: " + mimeType);
        response.setContentType(mimeType);
        response.setContentLength((int) downloadFile.length());
        String headerKey = "Content-Disposition";
        String headerValue = String.format("attachment; filename=\"%s\"", downloadFile.getName());
        logger.info("File Download Successfully : ");
        response.setHeader(headerKey, headerValue);
        OutputStream outStream = response.getOutputStream();
        byte[] buffer = new byte[BUFFER_SIZE];
        int bytesRead = -1;
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            outStream.write(buffer, 0, bytesRead);
        }
        inputStream.close();
        outStream.close();
    }