我正在尝试使用FileReader获取图像的base-64表示,并将其提交给.net WebApi服务以进行图像上载.
我的问题是fileReader.result的内容无法作为base-64编码的图像,至少根据.net.
我只是使用一个非常简单的方法,并使用fiddler测试发布到服务.如果我从filereader.result发布完整的结果字符串,当我尝试使用FromBase64String读取字符串时,我收到错误"Base-64 char数组或字符串的长度无效".
public void Post([FromBody]string imgString)
{
var myString = imgString.Split(new char[]{','});
byte[] bytes = Convert.FromBase64String(myString[1]);
using (MemoryStream ms = new MemoryStream(bytes))
{
Image image = Image.FromStream(ms);
image.Save("myBlargyImage.jpg");
}
}
Run Code Online (Sandbox Code Playgroud)
是剪切+粘贴到小提琴手做的东西到我需要在这里考虑的字符串,或者还有其他我没有正确做的事情?这似乎应该是直截了当的:将图像编码为字符串,发送字符串,解码字符串,保存图像.
例如,使用filereader在客户端上显示图像的预览,我在filereader.result中获得以下内容:
SRC = "数据:图像/ JPEG; BASE64,/ 9J/4AAQSkZJRgABAgEAyADIAAD/... oBUA00AqYL/AMCg3 // Z"
我试过发送整个字符串("data ... Z"),只发送Base64字符串.目前,我正在拆分字符串服务器端以获取Base64字符串.这样做,我总是得到无效长度错误.
或者,我尝试只发送base64字符串.不知道领先/是否实际上是字符串的一部分,我在帖子正文中删除了它.这样做,我实际上可以将值读入字节数组,但是使用Image.FromStream我得到一个错误,即该数组不是有效的图像.
所以,我得到一个错误,即filereader提供的整个字符串是一个无效的长度,或者,我修改它并得到一个错误,即使它是一个有效的长度,它也不是一个有效的图像(当读取bytearray时).这就是让我想知道在filereader.read,chrome中的dev工具,然后剪切和粘贴到fiddler之间是否存在翻译或格式化问题.
更新: 我尝试了一个更现实的实现,只需将filereader.result放入$ .post()调用,它就可以正常工作了.
看来我是对的,当我触摸它以将filereader.result剪切并粘贴到服务调用中时,我或者记事本++或者fiddler正在对数据执行某些操作.
如果有人确切地知道可能是什么,或者如何验证他们是否正在向服务发送有效的图像base-64编码,那么它可能会帮助将来尝试相同事情的其他人.
同样,如果在浏览器filereader.result中产生'data:image/jpeg; base64,somestring',我只是从开发人员工具面板复制该字符串,创建一个fiddler调用,并在请求正文中包含复制的字符串:"=数据:图像/ JPEG; BASE64,somestring".不知何故,base-64'somestring'在剪切+粘贴中被碾碎.
function readURL(input) {
if (input.files && input.files[0]) {
reader = new FileReader();
reader.onload = function (e) {
$('#imgPreview').attr('src', e.target.result);
$.post('/api/testy/t/4',
{'':e.target.result}
); …Run Code Online (Sandbox Code Playgroud)