我正在编写一个Web应用程序,可将图像从Web保存到数据库。目前,我用来保存图像的内容如下:
[WebMethod]
public static void Save(string pictures)
{
// pictures is an object containing the URL of the image along with some metadata
List<ImageObject> imageList = new JavaScriptSerializer().Deserialize<List<ImageObject>>(pictures);
for (int i = 0; i < imageList.Count; i++)
{
var webClient = new WebClient();
byte[] byteArray = webClient.DownloadData(imageList[i].URL);
imageList[i].Picture = byteArray;
}
// some SQL to save imageList
}
ImageObject:
[DataContract]
public class ImageObject
{
[DataMember]
public string URL { get; set; }
[DataMember]
public string Picture { get; set; }
}
现在,这适用于从URL下载。该条目已保存到我的数据库中:
0xFFD8FFE000104A464946000101[...]331B7CCA7F0AD3A02DC8898F
要显示此图片,我只需在检索后调用System.Convert.ToBase64String()
并将其用作图片src
即可。但是,我现在正在尝试为用户添加一些功能来上传自己的图片。我的功能,来自<input />
:
function uploadPicture(){
var numPics = document.getElementById("uploadedPictures").files.length;
var oFReader = new FileReader();
oFReader.onload = function (oFREvent) {
var src = oFREvent.target.result;
document.getElementById('image').src = src;
}
oFReader.readAsDataURL(document.getElementById("uploadedPictures").files.length;
}
使用时,这是我从浏览器获得的图像源(当原始图像仅为~500 KB时超过2 MB):
data:image/bmp;base64,/9j/4AAQSkZJRgABAgEAY[...]k8tTMZEBCsEbSeRYem493IHAfiHWq6vKlOv/Z
当用作源时,它会正确显示。但是,由于这不是实际的URL(并且WebClient.DownloadData()
仅限于<260个字符的URL),我一直在尝试其他方法将此数据保存到我的数据库中。但是,我似乎无法找到以WebClient.DownloadData()
格式保存的功能。例如,我查看了converting a base 64 string to an image and saving it,其中大部分答案似乎都使用Convert.FromBase64String()
,但使用此格式似乎以不同的格式保存到我的数据库中:
0x64006100740061003A0069006D0[...]10051004500420041005100450042004
尝试在此处使用System.Convert.ToBase64String()
返回
ZABhAHQAYQA6AGkAbQBhAGcAZQAvAGIAbQBwADsAYgBh[...]UwBlAFIAWQBlAG0ANAA5ADMASQBIAEEAZgBpAEgAVwBxADYAdgBLAGwATwB2AC8AWgA=
与我使用的Convert.FromBase64String()
不同。我在谷歌上发现的其他东西,试图让它以相同的格式保存或显示为图像,到目前为止还没有用。
因此,我想知道是否存在将结果从FileReader
转换为与WebClient.DownloadData()
相同格式的方法,或者是否有某种方法可以转换0x6400[...]
数据为可以使用<img>
源显示的格式。
答案 0 :(得分:0)
事实证明,数据保存到数据库的原因始于0x64006100[....]
而非0xFFD8FFE0[...]
,原因是我忘记删除初始data:image;base64,
的URI。执行此操作后,所有内容都会使用System.Convert.ToBase64String()
保存并正确读取。