C# webClient.DownloadData抛出';System.IO.PathTooLongException';
我有一种方法是通过URL下载图像,有时URL会变成这样,其中包含很长的路径(我删除了一些字符串,这不是一个很长的问题:):C# webClient.DownloadData抛出';System.IO.PathTooLongException';,c#,system.io.file,C#,System.io.file,我有一种方法是通过URL下载图像,有时URL会变成这样,其中包含很长的路径(我删除了一些字符串,这不是一个很长的问题:):数据:图像/jpeg;base64,/9j/4AAQSKZJRJABAAQAAAQABAD/2WCEAKGBEXITHEHUS BAVFHMXGRCxFRGWFRCVGRCYFHWgGBGfUgGBGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGf
数据:图像/jpeg;base64,/9j/4AAQSKZJRJABAAQAAAQABAD/2WCEAKGBEXITHEHUS BAVFHMXGRCxFRGWFRCVGRCYFHWgGBGfUgGBGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfGfCHS4RYXQ1VJCOKEORJEG6CW//EABKBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2.这家公司是一家公司的一家公司,一家公司的一家公司,一家公司的一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家公司,一家,一家公司,一家公司,一家,一家公司,一家公司,一家,一家,一家公司,一家,一家,一家公司,一家,一家公司,一家,一家,一家,一V2TXH1S+9+Ded8.这个词的意思是一个单词。这个单词的意思是一个单词的意思是一个单词的意思是一个单词的意思是一个单词的意思是一个单词的意思是一个单词的意思。这个单词的意思是一个单词的意思是一个单词的意思是一个单词。这个单词的意思是一个单词的意思是一个单词。这个单词的意思是一个单词的意思是一个单词的意思是一个中国政府的第二代中国政府的第二代中国政府在一个中国政府的一个中国政府在一个项目中的一个中国政府在一个中国的一个中国。该项目的一个中国政府在一个中国在一个中国的一个中国在一个中国的框架框架框架框架框架中,即即即在一个中国的中国。该中国的一个中国政府在一个中国政府在一个中国政府在一个中国的框架框架框架框架框架框架框架框架框架。该框架框架框架框架。该框架框架框架。该框架框架框架框架框架框架YHXYC644KTBUDRZVARQWJ56.目前,他们正在研究一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的JJcB/X8 8 8 8 8 8 8 8 8 8 8 8 8 8 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ZVR5NZA2SOIFGT3SWH5XOUOF7IEJFF/mMvK/4y/8ARvxeP0/Y3XNRBPTPTDN1U0MDTIHRTPVDZJTVCRKCRAYB5KH/A+PGGINRU2YF8A22F7GLKDTE3GXA6PYDW1+boW2uSQY+HEWHO/EGWFYOUXVIOPDBT0TJWXHO6YXKR0PC3IOFM37WU4AKBA7ABLLUSB8TP7DICHG++RIbwDO/TBU778F6CPBC3JJMSCER8JETGDWQ3WQWQ4NFWCYC+5AWOYC/5AWOYOYIWYC/5AWOYIWYIW3C=2Q=
然后,当我调试或下载映像时,会出现以下异常: var DL=webClient.DownloadData(base64)
指定的路径和/或文件名太长。完全合格的 名称必须少于260个字符,文件夹名称必须少于260个字符 超过248个字符。
我也做过研究,建议在webconfig中添加
,或者使用不同的库,但不幸的是,这无助于解决问题。
谁能帮我一下,或者给我指一下正确的方向:)
提前感谢。
控制器:
[HttpPost]
public string DownloadImagesFromLinkViaURL(ImagesViewModel model)
{
var RandomName = Guid.NewGuid().ToString("N").Substring(0,12);
using (WebClient webClient = new WebClient())
{
try
{
string base64 = model.ImageURL.Substring(model.ImageURL.IndexOf(',') + 1);
byte[] data = Convert.FromBase64String(base64);
var DL = webClient.DownloadData(base64);
using (MemoryStream mem = new MemoryStream(DL))
{
using (var content = Image.FromStream(mem))
{
var format = ImageFormat.Png.ToString().ToLower();
var PathIMG = "https://SomeName.com/folder/" + RandomName + "." + format;
content.Save(Path.Combine(Server.MapPath(PathIMG)));
ImageStore img = new ImageStore();
img.ProducentVarenr = model.ImageName;
img.ImageOrginalURL = model.ImageURL;
img.ImageRandomName = RandomName;
img.LinktilBillede = PathIMG;
db.ImageStoreList.Add(img);
db.SaveChanges();
}
}
}
catch (ArgumentException)
{
return "content is not image";
}
}
return "saved";
}
ViewModal:
public class ImagesViewModel
{
public int ImageID { get; set; }
public string ImageURL { get; set; }
public string ImageName { get; set; }
public string ImagePath { get; set; }
public string RandomName { get; set; }
}
您看到的数据不是url或路径。它是以字符串形式表示的图像数据。因此,不需要任何下载,因为您已经有图像数据 若你们粘贴那个很长的字符串,即base64到图像转换器工具,你们会看到实际的图像 使用给定的base64字符串,可以使用以下样式将其保存到文件中:
File.WriteAllBytes(@"c:\yourfile", Convert.FromBase64String(base64));
以下是原始方法的(未测试和未重构)固定版本,如回答评论中所要求
[HttpPost]
public string DownloadImagesFromLinkViaURL(ImagesViewModel model)
{
var RandomName = Guid.NewGuid().ToString("N").Substring(0, 12);
var format = ImageFormat.Png.ToString().ToLower();
var PathIMG = "https://SomeName.com/folder/" + RandomName + "." + format;
if (model.ImageURL.StartsWith("data:image"))
{
string base64 = model.ImageURL.Substring(model.ImageURL.IndexOf(',') + 1);
File.WriteAllBytes($@"c:\temp\{RandomName}.jpeg", Convert.FromBase64String(base64));
ImageStore img = new ImageStore();
img.ProducentVarenr = model.ImageName;
img.ImageOrginalURL = model.ImageURL;
img.ImageRandomName = RandomName;
img.LinktilBillede = PathIMG;
db.ImageStoreList.Add(img);
db.SaveChanges();
return "saved";
}
using (WebClient webClient = new WebClient())
{
try
{
byte[] data = Convert.FromBase64String(base64);
var DL = webClient.DownloadData(base64);
using (MemoryStream mem = new MemoryStream(DL))
{
using (var content = Image.FromStream(mem))
{
content.Save(Path.Combine(Server.MapPath(PathIMG)));
ImageStore img = new ImageStore();
img.ProducentVarenr = model.ImageName;
img.ImageOrginalURL = model.ImageURL;
img.ImageRandomName = RandomName;
img.LinktilBillede = PathIMG;
db.ImageStoreList.Add(img);
db.SaveChanges();
}
}
}
catch (ArgumentException)
{
return "content is not image";
}
}
return "saved";
}
这不是路径,它是图像的base64编码数据,正如你们在我的代码中看到的,我还试图将base64转换为图像,然后下载图像并保存到某个文件夹,但抛出异常。下载错误
webClient.DownloadData(base64)
将引发异常,因为base64
不包含任何url/路径。您希望如何处理该图像数据?是否保存到文件?我只想通过url下载图像,然后将其保存到文件夹中。我只对包含数据的图像有问题:image/jpeg;base64,/someRandomString,否则该方法工作正常感谢帮助Risto:)