【发布时间】:2022-12-10 17:57:55
【问题描述】:
我有一个 asp.net webform 项目,我在其中使用 iTextSharp 从保存在数据库中的数据生成 pdf 文档。一切都很完美,除非我需要生成我的图像,保存在一个列表字符串中。我放置了一个断点,我正在读取数据,但每次它都会在 Image.GetInstance(item) 部分抛出错误。如果我这样离开它,它会抛出一个错误 System.IO.PathTooLongException: '指定的路径、文件名或两者都太长。完全限定的文件名必须少于 260 个字符,目录名必须少于 248 个字符。'我也试过将项目转换为字符串,但它说找不到路径。我什至尝试将整个列表转换为列表字节,但我遇到了同样的错误。我在数据库中的列表字符串看起来像这样的格式:
ImgList:[“904u3jg8orut390jgg”,“09re8im09mj3895gh”,“509tgj390h359”]。
我尝试并用谷歌搜索了每一个错误,但我找不到解决方案。我什至尝试在 Windows 中启用 longpath,但它对我不起作用。如果有人能帮助我,我将不胜感激。这是我的代码。
编辑: 我认为问题在于拆分和替换字符。当我将字符串添加到列表中时,我得到了一个额外的引号和反斜杠,像这样包裹在“\”... \“”中。我试过修剪、替换字符,但没有成功。我试图将 imgList = imgList.Select(s => s.Replace("\"", string.Empty)).ToList(); 更改为 imgList = imgList.Select(s => s.Replace("\\b\"", string.Empty)).ToList(); 但它没有用。有什么帮助吗?
//getting data from database
string strList = dt.Rows[0]["imgList"].ToString();
List<string> imgList = new List<string>(strList.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries));
imgList = imgList.Select(s => s.Replace("\"", string.Empty)).ToList();
imgList = imgList.Select(s => s.Replace("[", string.Empty)).ToList();
imgList = imgList.Select(s => s.Replace("]", string.Empty)).ToList();
//assign the value
pdf.ImageList = imgList;
//using iTextSharp
foreach (var item in pdf.ImageList)
{
if (item.Count() >= 1)
{
Image image = Image.GetInstance(item);
}
}
【问题讨论】:
-
您需要提供更多信息。错误似乎很明确 - 路径/文件名太长。您要参考什么路径?您没有与我们分享您保存这些文件的路径。数据库中包含图像名称的列的长度是多少?
-
它在 postgresql 中保存为 jsonb @bartosz-olchowik
-
数据库中的图像是什么格式?您的
string strList = dt.Rows[0]["imgList"].ToString();使该数据库条目成为一个字符串,无论它最初是什么...... -
@mkl 那些图像已上传,HttpPostedFile 在 byte[] 来自 Binary Reader 并转换为 ToBase64String byte[]
-
“那些图像是……并转换为 ToBase64String byte[]”- 因此这些图像是 base64 编码的...因此您必须再次对数据库内容进行 bas64 解码才能获取图像字节数组。然后将这些图像字节数组输入
Image.GetInstance。
标签: c# arraylist webforms itext pdf-generation