如何从任何类型的数据库(pdf、xlx、jpg 或 png)中检索文件并使其可在网页上下载?

Posted

技术标签:

【中文标题】如何从任何类型的数据库(pdf、xlx、jpg 或 png)中检索文件并使其可在网页上下载?【英文标题】:How to retrieve file from Database of any type(pdf,xlx,jp or png) and make it download-able on webpage? 【发布时间】:2021-10-11 04:03:53 【问题描述】:

我正在使用 SQL Server Management Studio。在我的表中有一个数据类型为varbinary(max) 的列。我已成功将特定格式(pdf、xlx、jp 或 png)的文件上传到我的表中。但现在我面临着找回它的困难。我正在使用 ASP.NET。我需要制作一个控制器,它可以通过 LINQ 从数据库中获取文件并将其下载到用户的计算机上。

【问题讨论】:

这方面有很多教程。 我浏览了很多教程,不知何故他们的解决方案不适合我。我的案例内容类型不知道,因为它可以是 pdf、xlsx、png 等。您能否建议我任何具体的教程。我被这种情况困扰了两天。谢谢! 【参考方案1】:

有很多关于这个问题的教程,其中包含可能会或可能不会处理当前场景的耗时答案。 因此,您需要分步执行以下操作:

    javascript 中,通过以下步骤将收集到的数据发送到控制器:
var file = document.getElementById("---id of the insert tag where document is loaded").files[0];

然后使用FormData文件(变量)附加到表单中。

formData = new FormData();
formData.append("file",file);     

当我们向控制器发送数据时,formData 充当键:值对。 现在通过 ajax 将数据发送到控制器:

$.ajax(
    url: "--url--",
    data: formData,
    type: "POST"
...

现在在 URL 中提到的控制器中,确保它包含与 formData.append("file",file); 中提到的同名 file 的参数。文件的数据类型为HttpPostedFileBase。控制器将如下所示:

 [HttpPost]
 public ActionResult SaveFile( HttpPostedFileBase file)
  
//The below mentioned code will convert file in byte[] which can be transferred to database
       using (Stream inputStream = file.InputStream)
        
          MemoryStream memoryStream = inputStream as MemoryStream;
          if (memoryStream == null)
           
              memoryStream = new MemoryStream();
              inputStream.CopyTo(memoryStream);
           
                        byteValue = memoryStream.ToArray();// datatype = byte[]
        
           

现在通过在服务器上创建文件来从数据库中检索文件,然后通过提供服务器上文件的路径将该文件进一步发送给用户。

filePath = Path.Combine(HttpContext.Current.Server.MapPath("-----Location where you want to save file----"),"---Name of file with extention---");//filePath will create the path. Note: it's just a path.
MultiPurpose.DeleteExistingFile(filePath);// It will delete pre-existing file if already present on the path with same name
System.IO.File.WriteAllBytes(filePath, db.file);// It will create the file present on database with datatype 'byte[]'
return File(filePath ,Content-Type, "--you can mention new file name here---"); // This will download the file on user's pc with the file name mentioned in third parameter.

【讨论】:

以上是关于如何从任何类型的数据库(pdf、xlx、jpg 或 png)中检索文件并使其可在网页上下载?的主要内容,如果未能解决你的问题,请参考以下文章

在纯JaveScript中实现报表导出:从“PDF”到“JPG”

在纯JaveScript中实现报表导出:从“PDF”到“JPG”

php生成的图片如何保存为jpg

使用 Javafx(netbeans) 在 SQLITE 数据库中插入 PDF 或任何类型的文件

如何将一批pdf文件转换成jpg文件

pdf怎么转换成jpg图片格式