0

我很难找到一种方法来使用 ASP.Net Webpages 2 将文档上传到 varbinary(max) 中的数据库,我也想下载它。

到目前为止,我所拥有的是下面它应该将文件上传到网站上的目录但它没有做任何事情。任何帮助都会很棒。谢谢

         var fileName = "";
         var fileSavePath = "";
         int numFiles = Request.Files.Count;
         int uploadedCount = 0;
         for (int i = 0; i < numFiles; i++)
         {
             var uploadedFile = Request.Files[i];
             if (uploadedFile.ContentLength > 0)
             {
                 fileName = Path.GetFileName(uploadedFile.FileName);
                 fileSavePath = Server.MapPath("~/UploadedFiles/" +
                   fileName);
                 uploadedFile.SaveAs(fileSavePath);
                 uploadedCount++;
             }
         }
         message = "File upload complete. Total files uploaded: " +
           uploadedCount.ToString();
4

2 回答 2

1

以下代码位于您上传文件的页面顶部。请注意,您应该根据您的数据库修改表和字段名称。此外,您应该确保包含上传控件的表单的enctype属性设置为multipart/form-data

@{ 
    int id = 0;
    var fileName = "";
    var fileMime = "";
    if (IsPost) {
        var uploadedFile = Request.Files[0];
        fileName = Path.GetFileName(uploadedFile.FileName);
        if(fileName != String.Empty)
        {
            fileMime = uploadedFile.ContentType;
            var fileStream = uploadedFile.InputStream;
            var fileLength = uploadedFile.ContentLength;

            byte[] fileContent = new byte[fileLength];
            fileStream.Read(fileContent, 0, fileLength);
            var db = Database.Open("FileUploading");
            var sql = "INSERT INTO Files (FileName, FileContent, MimeType) VALUES (@0,@1,@2)";
            db.Execute(sql, fileName, fileContent, fileMime);
        }
    }
}

要显示数据库中的文件,您需要一个单独的“处理程序”文件,其中仅包含以下代码:

@{
    int id = 0;
    if(Request["Id"].IsInt()){
        id = Request["Id"].AsInt();
        var db = Database.Open("FileUploading");
        var sql = "Select * From Files Where FileId = @0";
        var file = db.QuerySingle(sql, id);
        if(file.MimeType.StartsWith("image/")){
            Response.AddHeader("content-disposition", "inline; filename=" + file.FileName);
        } else {
            Response.AddHeader("content-disposition", "attachment; filename=" + file.FileName);
        }
        Response.ContentType = file.MimeType;
        Response.BinaryWrite((byte[])file.FileContent);
    }
}

此文件用作src图像文件的属性或用作指向应下载文件(如 PDF 或 Word 文件)的链接的 URL。如果将此处理程序文件称为“download.cshtml”,则保存在数据库中的图像文件的链接应如下所示:

<img src="download.cshtml?Id=@id" alt="" />

其中 Id 参数值是数据库中文件的 ID。下载链接如下所示:

<a href="download.cshtml?Id=@id">Click Here</a>

所有这些都取自我的文章: http: //www.mikesdotnetting.com/Article/148/Save-And-Retrieve-Files-From-a-Sql-Server-CE-Database-with-WebMatrix。介绍 SQL Compact 数据库的文章之间的唯一区别是 SQL CE 中文件的数据类型与imageSQL varbinary(max)Server 中的不同。

于 2014-10-13T09:15:36.440 回答
0

根据您的代码..您没有将图像上传到数据库。相反,您将图像保存在位于根目录/ UploadedFiles 中的文件夹中

将图像存储在数据库中..您应该使用此代码..

using (Stream fs = uploadedFile.PostedFile.InputStream)
            {
                using (BinaryReader br = new BinaryReader(fs))
                {
                    byte[] bytes = br.ReadBytes((Int32)fs.Length);
                    string contentType = uploadedFile.PostedFile.ContentType;
                    SqlParameter[] arParams = new SqlParameter[2];
                    arParams[0] = new SqlParameter("@ID", SqlDbType.Int);
                    arParams[0].Value = 1; 'example
                    arParams[1] = new SqlParameter("@contentType", SqlDbType.Varchar(50));
                    arParams[1].Value = contentType;
                    arParams[2] = new SqlParameter("@document", SqlDbType.Varbinary(MAX));
                    arParams[2].Value = bytes;
                    SqlHelper.ExecuteNonQuery(SQLConn, CommandType.StoredProcedure,                     "Upload_Attachment", arParams);

                }
            }
于 2014-10-13T00:38:56.583 回答