私の ASP ページでは、ASP ページでファイルをダウンロードする直前に 1 つの JavaScript 関数を呼び出す必要があります。私の実際の要件は、ダウンロードボタンをクリックするたびにダウンロード形式を確認する必要があることです。
したがって、私のダウンロード ボタン イベントでは、2 つのラジオ ボタン (asp:RadioButton)、つまり docx、pdf と 1 つの [OK] ボタンを含む div タグを表示するだけです。ラジオ ボタンを選択した後、ユーザーは [ok] ボタン (asp:Button) を押します。 .
ついに、
Ok ボタン (asp:Button) イベントでは、div タグ部分を非表示にするだけで、ユーザーが選択した出力形式に基づいて、ファイルがダウンロードされます。
私のOKボタンイベントコードは以下のとおりです。
protected void OKButton(object sender, EventArgs e)
{
string outputType = "";
if (docx.Checked == true)
{
outputType = "docx";
}
else
{
outputType = "pdf";
}
filename=filename+"."+outputType;
ClientScript.RegisterStartupScript(GetType(), "popup", "hidePopUp()", true);
bool isDownloaded=downloadFile(strURL, docPath, filename);
}
downloadFile 関数を以下に示します。
protected bool downloadFile(string srcURL, string docPath, string filenameOnly)
{
System.IO.FileInfo FileName = new System.IO.FileInfo(srcURL);
FileStream myFile = new FileStream(srcURL, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
BinaryReader _BinaryReader = new BinaryReader(myFile);
if (FileName.Exists)
{
try
{
long startBytes = 0;
string lastUpdateTiemStamp = File.GetLastWriteTimeUtc(docPath).ToString("r");
string _EncodedData = HttpUtility.UrlEncode(filenameOnly, Encoding.UTF8) + lastUpdateTiemStamp;
Response.Clear();
Response.Buffer = false;
Response.AddHeader("Accept-Ranges", "bytes");
Response.AppendHeader("ETag", "\"" + _EncodedData + "\"");
Response.AppendHeader("Last-Modified", lastUpdateTiemStamp);
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName.Name);
Response.AddHeader("Content-Length", (FileName.Length - startBytes).ToString());
Response.AddHeader("Connection", "Keep-Alive");
Response.ContentEncoding = Encoding.UTF8;
//Send data
_BinaryReader.BaseStream.Seek(startBytes, SeekOrigin.Begin);
//Dividing the data in 1024 bytes package
int maxCount = (int)Math.Ceiling((FileName.Length - startBytes + 0.0) / 1024);
//Download in block of 1024 bytes
int i;
for (i = 0; i < maxCount && Response.IsClientConnected; i++)
{
Response.BinaryWrite(_BinaryReader.ReadBytes(1024));
Response.Flush();
}
//if blocks transfered not equals total number of blocks
if (i < maxCount)
return false;
return true;
}
catch (Exception ex)
{
return false;
}
finally
{
_BinaryReader.Close();
myFile.Close();
}
}
else
{
return false;
}
}//downloadFile ends here...
ここで、特定のファイルが正常にダウンロードされました。ただし、Div タグ部分は非表示になりませんでした。
downloadFile 関数を呼び出さずに試してみたところ、div タグ部分が正常に非表示になります。
ただし、最初にdivタグ部分を非表示にしてから、特定のファイルをダウンロードする必要があります.私の画像も参照してください...
この問題から抜け出すために私を導いてください...