gpt4 book ai didi

c# - 从数据库问题下载 ASP.NET MVC 3 文件

转载 作者:太空宇宙 更新时间:2023-11-03 13:59:02 24 4
gpt4 key购买 nike

编辑:

为简洁起见,这里是表的创建脚本,去掉了对键的限制。

CREATE TABLE [dbo].[ProfileFile](
[ID] [int] IDENTITY(1,1) NOT NULL,
[ProfileID] [int] NOT NULL,
[FileTypeId] [int] NOT NULL,
[Data] [image] NOT NULL

编辑:

尝试绕过NHibernate访问服务层的数据

byte[] temp = (byte[])this._baseModelRepository.CurrentSession.CreateSQLQuery("SELECT Data FROM ProfileFile WHERE ProfileID = :ID").SetParameter("ID", id).UniqueResult();

编辑:查看db中保存的二进制数据后,似乎整个文件都已上传,我的问题实际上是在显示图像方面。

图像未呈现,但我可以按照操作链接下载文件,但它被截断为 8KB。

由 NHibernate 生成的 ProfileFile 模型类数据字段

public virtual System.Byte[] Data { get; set; }

在进行此设置时,我暂时对 MIME 类型和文件名进行了硬编码。

public ActionResult GetProfilePhotoByID(int profileID)
{
var profileFile= //Load file object from DB by profileID
byte[] byteArray = profileFile.Data;
string mimeType = "image/jpg";
string fileName = "ProfilePhoto.JPG";

return File(byteArray, mimeType, fileName);
}

使用调试器我发现 profileFile.Data 的大小是 8000。也许这是 NHibernate 的限制?

此外, 这是在 IIS 上运行的, 我在 Chrome、Firefox 和 IE 中得到了相同的效果,但主要是在 Chrome 中进行测试。

原始问题:我试图让用户上传个人资料照片,稍后我会在他们的个人资料页面上提供该照片。不幸的是,图片文件没有完全上传,被截掉了 8 KB。下面是一些更重要的代码段的简化版本。

索引 View 片段

@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { id = "profileform", enctype = "multipart/form-data" }))

<input type="file" id="photo" name="photo" />

Controller 发布 Action 有 HttpPostedFileBase photo 参数

byte[] input;
if (photo != null && photo.ContentLength > 0)
{
input = new byte[photo.ContentLength];
photo.InputStream.Read(input, 0, photo.ContentLength);


if (model.ProfileFiles == null)
{
model.ProfileFiles = new List<Core.Model.ProfileFiles>();
}

model.ProfileFiles.Add(new Core.Model.ProfileFiles()
{
ProfileID = model.ID,
Profile = model,
Data = input
});
}

模型类是用 NHibernate 生成的。相关领域是

// One To Many:
public virtual IList<ProfileFile> ProfileFiles { get; set; }

如果需要更多信息,请发表评论。

最佳答案

解决了这个问题,并且仍然使用 NHibernate,使用 Peter Gluck's answer一个相关的问题。

var persistenceModel = AutoMap.AssemblyOf<Model.BaseModel>()
.Override<Model.ProfileFile>(map =>
{
// Sets max length of byte[] retrieved from image column of DB
map.Map(x => x.Data).Length(2147483647);
})
... etc.

关于c# - 从数据库问题下载 ASP.NET MVC 3 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11195128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com