【问题标题】:Uploading documents in sql server 2008 using asp.net C#使用asp.net C#在sql server 2008中上传文档
【发布时间】:2012-12-04 17:15:02
【问题描述】:
我目前正在研究使用 ASP.Net 和 C# 为 Web 应用程序上传和下载文档到 sql server 2008 数据库的不同方法和技术。
我找到了这个excel tutorial,我想知道它是否类似于以类似的方式上传pdf和word文档?
谢谢
【问题讨论】:
标签:
c#
asp.net
sql-server-2008
file-upload
download
【解决方案1】:
本教程适用于任何文件,而不仅仅是 excel。关键在这部分:
Stream fs = FileUpload1.PostedFile.InputStream;
BinaryReader br = new BinaryReader(fs); //reads the binary files
Byte[] bytes = br.ReadBytes((Int32)fs.Length); //counting the file length into bytes
query = "insert into Excelfiledemo(Name,type,data)" + " values (@Name, @type, @Data)"; //insert query
com = new SqlCommand(query, con);
com.Parameters.Add("@Name", SqlDbType.VarChar).Value = filename1;
com.Parameters.Add("@type", SqlDbType.VarChar).Value = type;
com.Parameters.Add("@Data", SqlDbType.Binary).Value = bytes;
com.ExecuteNonQuery();
Label2.ForeColor = System.Drawing.Color.Green;
Label2.Text = "File Uploaded Successfully";
这里基本上发生的是文件流被转换为字节数组,该数组作为数据块存储在数据库中。这可用于任何文件类型。只需确保保留文件名(或至少扩展名),就像上面的示例一样,以便在将其转回磁盘上的文件时知道它是什么类型的文件。
【解决方案2】:
考虑到您共享的链接中的示例,请使用以下验证:
switch (ext.ToLower())
{
case ".pdf":
type = "application/pdf";
break;
case ".doc":
type = "application/msword";
break;
case ".docx":
type = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
}
Here 是您可以考虑的更多 MS Office 2007 MIME 类型,在All MIME Types 您可以找到更广泛的列表。
【解决方案3】:
答案很简单:是的,很相似。
编辑
您找到的链接是一个示例,向您展示如何将文件内容存储到数据库中,它可以更改为任何其他不同的文件类型:pdf、doc、jpg 等等,只要您记录 mim e 类型当下载最终用户正确获取它时
【解决方案4】:
当您首先使用带有代码的 ASP.NET MVC 4 或 5 时,此答案更合适。
//on your view model
public class MyViewModel
{
[Required]
[DisplayName("Select File to Upload")]
public IEnumerable<HttpPostedFileBase> File { get; set; }
}
// on your object class, make sure you have a data type byte[] that will store a file in a form of bytes, a byte[] data type store both Images and documents of any content type.
public class FileUploadDBModel
{
[Key]
public int Id { get; set; }
public string FileName { get; set; }
public byte[] File { get; set; }
}
// on your view
<div class="jumbotron">
@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div>
@Html.LabelFor(x => x.File)
@Html.TextBoxFor(x => x.File, new { type = "file" })
@Html.ValidationMessageFor(x => x.File)
</div>
<button type="submit">Upload File</button>
}
</div>
//on your controller
public ActionResult Index(MyViewModel model)
{
FileUploadDBModel fileUploadModel = new FileUploadDBModel();
//uploading multiple files in the database
foreach (var item in model.File)
{
byte[] uploadFile = new byte[item.InputStream.Length];
item.InputStream.Read(uploadFile, 0, uploadFile.Length);
fileUploadModel.FileName = item.FileName;
fileUploadModel.File = uploadFile;
db.FileUploadDBModels.Add(fileUploadModel);
db.SaveChanges();
}
}