我要求我必须创建一个pdf文件。这个Pdf文件包含一些数据。现在,主要要求是在我创建pdf之后,我应该能够下载它。现在PDF正在创建,但无法下载。 请注意它的MVC应用程序.. 我正在分享代码以供进一步参考
public class HoldFilesController : Controller
{
// GET: HoldFiles
string holdpath = ConfigurationManager.AppSettings["HoldPath"].ToString();
public ActionResult Index()
{
DirectoryInfo dirInfo = new DirectoryInfo(holdpath);
List<FileInfo> files = dirInfo.GetFiles().ToList();
return View("Index",files);
}
**The above controller gets filenames from a file directory**
public ActionResult ViewFile(string[] Name)
{
for (int i = 0; i < Name.Length; i++)
{
string filepath=holdpath + @"\" + Name[i];
string result;
using (StreamReader streamReader = new StreamReader(filepath))
{
result = streamReader.ReadToEnd();
}
using (System.IO.MemoryStream memoryStream = new System.IO.MemoryStream())
{
Document document = new Document(PageSize.A4, 10, 10, 10, 10);
PdfWriter writer = PdfWriter.GetInstance(document, memoryStream);
document.Open();
Paragraph paragraph = new Paragraph();
paragraph.Add(result);
document.Add(paragraph);
document.Close();
byte[] bytes = memoryStream.ToArray();
memoryStream.Close();
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "attachment;
filename=MyFile.pdf");
Response.TransmitFile(Server.MapPath("~/Files/MyFile.pdf"));
Response.End();
Response.Close();
}
}
Above控制器将获取文件名,读取文件并创建pdf和 下载。 在调试代码时,我可以看到该文档已创建。但有 下载时遇到麻烦
答案 0 :(得分:0)
您可以尝试这样的事情:
private FileResult ViewFile(string[] Name)
{
//create your file at filePath
byte[] fileBytes = System.IO.File.ReadAllBytes(filePath);
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, "MyFile.pdf"));
}
答案 1 :(得分:0)
您似乎使用随机文件名下载Android/Sdk/tools/emulator -avd android2 -skin 768x1280 -use-system-libs
而不是使用您刚创建的文件。首先,将MyFile
部分移到Response
之外并停止关闭using
,因为MemoryStream
块会在完成后为您执行此操作。所以在using
之外你应该写一些类似的东西:
using