我尝试添加一个方法,该方法使用网格视图中的链接,然后以Stream的形式从服务器获取文件,然后提示用户保存它的位置。我已将System.Windows.Forms引用添加到我的控制器,然后添加了以下方法。
docker version > /dev/null || {
# that's in case docker machines is the the current one (OS X)
eval "$(docker-machine env default)"
}
# keep this here, it will return an error code if docker is not usable
docker version
没有错误,但是当代码点击行[HttpGet]
[Authorize]
public void DownloadAssetStream(int assetID)
{
//gStream created from server file.
Stream myStream = gStream;
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "pdf files (*.pdf)|*.pdf|All files (*.*)|*.*";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.RestoreDirectory = true;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
if ((myStream = saveFileDialog1.OpenFile()) != null)
{
// Write file from stream.
myStream.Close();
}
}
}
}
时,它无处可去,并且没有出现对话框。我错过了什么?
答案 0 :(得分:2)
您错过了您无法在ASP.NET应用程序中使用Windows控件。它可能适用于Visual Studio,但不适用于现实世界。
不是尝试打开文件对话框,而是将结果发送到流,例如使用FileStreamResult
:
return new FileStreamResult(gStream, "application/pdf");
第二个参数是内容类型,例如我使用了PDF文件的内容类型。
答案 1 :(得分:0)
您可以在File
action
结果
return File(gStream, "application/pdf", "DesiredNameToSave");
您需要将操作的返回类型更改为ActionResult
以处理所有类型的受支持返回值
public ActionResult DownloadAssetStream(int assetID)
答案 2 :(得分:0)
有一些有用的回复显示了如何将文件作为Stream返回但是为了显示资源管理器窗口,由于浏览器安全性,这是不可能的。任何想要允许用户定义自己的目标位置的人都必须使用浏览器自己的下载机制,该机制在本地下载文件,然后为用户提供将其保存到的位置的选项。