HTTP POSTでファイルをダウンロードすることはできますか? 私は "取得"方法(windows.location)を知っていますが、私の場合、サーバーに渡す必要がある多くのパラメータがあります。HTTP POSTでファイルをダウンロードすることはできますか?
答えて
はい、残りのPOST要求は、ファイル。ファイルの内容は、GETの場合と同様にHTTP応答として送信されます。
リクエスト方法とサーバーへのデータ送信方法以外に違いはありません。応答を処理する方法は、GETまたはPOSTのどちらを使用するかにかかわらず同じです。
こんにちはグレッグ、あなたは例を挙げることができますか?ありがとうございます – Sean
ある意味では、すべてのHTTP GETまたはPOSTは「ファイルのダウンロード」ですが、ファイルではなくメッセージのペイロードと考える方がよいでしょう。ほとんどの場合、ペイロードはブラウザがWebページとしてレンダリングするHTMLドキュメントです。しかし、もしそれがHTML文書でないなら、どうでしょうか?ブラウザがユーザーに「名前を付けて保存」ダイアログを提供するzipファイルの場合はどうなりますか?明らかに、ブラウザはレスポンスのコンテンツタイプについて決定し、正しく処理する必要があります。
ブラウザがコンテンツタイプを決定する最も一般的な方法の1つは、「Content-Type」と呼ばれるHTTP headerです。このヘッダーは、MIMEタイプの値をとります。これは、レスポンスにpdfファイルなどが含まれている場合に、アクロバットプラグインを起動するようなコンテンツ固有の処理を行うブラウザの鍵です。
すべてのブラウザで同じではないコンテンツタイプを判別します。同じ方法でコンテンツタイプに変換します。場合によっては、すべてのブラウザから必要な動作を得るためにヘッダーを設定して遊ぶ必要があります。すべてのサーバー側のテクノロジでHTTPヘッダーを設定できます。
JavascriptからPOSTリクエストを生成したいようです。私は、ブラウザにAJAXリクエストの結果をダウンロードとして扱わせる方法がないと信じています。 Content-Typeが、ブラウザが通常ダウンロードとして提供するもの(例えば「アプリケーション/オクテットストリーム」)に設定されていても、ブラウザはXMLHttpRequestオブジェクトにのみデータを格納します。
さらに、すでに知っているように、window.open()がPOSTリクエストを発行する方法はありません。
私は最良の方法は、サーバー上のファイルを生成するAJAX要求を行うことだと思います。ブラウザーで、その要求が完了したら、window.open()を使用して生成されたファイルをダウンロードします。
これは可能な解決策の1つです。もう1つは適切なファイルを取得するためにフォーム提出を実行しています。 –
このような意味ですか?このサーバー・コードで
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");
}
これは本当に役に立ちます、ありがとうございます。唯一の問題は、新しいウィンドウを開くことです。これはiFrameで開くことができますか? –
@Menelaos Vergis:
@Quandry:ありがとう、私はこの答えがそれにふさわしい注目を集めなかった理由を知らない。期待通りに動作する。 –
私はこれを使用してそれを解決するために管理:
service.js
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();
}
- 1. NSISでhttp getとhttp postを使用することはできますか?
- 2. 「HTTP POST」で「dataWithContentsOfURL」を使用することができます
- 3. PacketbeatのリクエストからHTTP POSTデータを見ることはできますか?
- 4. HTTPでファイルをダウンロードする
- 5. Http getとHttp Postで同じアクションメソッドのビューで別のオブジェクトを返すことはできますか?
- 6. Laravel 5.4でファイルのダウンロードをテストすることはできますか?
- 7. このdb_Class.phpファイルを親ディレクトリからダウンロードすることはできますか?
- 8. JsonResultを返すメソッドからファイルをダウンロードすることはできますか?
- 9. プログラムで.scnファイルをダウンロードして実行することはできますか?
- 10. FORM POSTリクエストでファイルをダウンロードするC#
- 11. ダウンロードすることなく、httpサーバ上のローカルとリモートの2つのファイルを比較できますか?
- 12. HTTP POSTでAjax経由でファイルをダウンロードするにはどうすればいいですか?
- 13. このファイルはどのようにダウンロードできますか?
- 14. mozswingファイルをダウンロードすることができます
- 15. JSPからバイナリファイルをダウンロードすることはできますか?
- 16. gzippedファイルをダウンロード中に解凍することはできますか?
- 17. CrateDBの結果をCSVファイルにダウンロードすることはできますか?
- 18. ファイルをダウンロードしているときに、データを.zipファイルに「スタンプ」することはできますか?
- 19. 空のデータをPOSTすることはできますか?
- 20. zipファイルとクライアントまたはサーバーからダウンロードできますか?
- 21. aurelia-http-clientでExcelファイルをダウンロードする
- 22. HTTPファイルを空白でダウンロードする
- 23. HTTP 406レストコールでファイルをダウンロードする
- 24. httpサーバのファイルをPythonでダウンロードする
- 25. 添付ファイルをダウンロードすることができません
- 26. HTTP POSTリクエストでレスポンスボディを返すことができますか? HTTPの仕様に従って、
- 27. $ httpインターセプタでHTTP応答ステータスを変更することはできますか?
- 28. POSTデータを送信するWHILEをリダイレクトすることはできますか?
- 29. HTTPハンドラのレスポンスからファイルをダウンロードできません
- 30. AndroidのネイティブアプリでPOSTを聞くことはできますか?
これはPOSTの利点で、多くのデータ(別名ペイロード)を送信できます。セキュリティもそこにありますが、あなたのケースではパラメータを送信することが必須です。 – EMM