关于javascript xml bin.base64存储文件到数据库
读取文件保存到xml中,然后发送到后台保存l_node6.dataType = "bin.base64";
var ado_stream = new ActiveXObject("ADODB.Stream");
ado_stream.Type = 1; // 1=adTypeBinary
ado_stream.Open();
ado_stream.LoadFromFile(filename);
l_node6.nodeTypedValue = ado_stream.Read(-1); // -1=adReadAll
ado_stream.Close();
将文件读取成二进制然后64编码。组成xml利用xmlhttp发送xml串到后台
我的后台为c#,然后用 Convert.FromBase64String来解析数据的时候提示
Base-64 字符数组的无效长度。
请高手帮助!谢谢!
一下是代码
//保存上传的文件
function SaveFiles()
{
// create XML document with default header and primary node
//var strXmlParamString = "<root>";
var xml_dom = new ActiveXObject("MSXML2.DOMDocument");
xml_dom.loadXML('<?xml version="1.0" ?> <root/>');
for (var i = 0; i < _fileList.length; ++ i)
{
var filename = _fileList[i];
if(filename.length > 0)
{
var sarray = new Array();
sarray = filename.split('\\');
var name = sarray[sarray.length-1];
var names = new Array();
names = name.split('.');
var filetype = names[1]
//strXmlParamString += "<file>";
//增加一个图片节点
var l_node1 = xml_dom.createElement("file");
xml_dom.documentElement.appendChild(l_node1);
var index = i + 1;
//主键
var l_node2 = xml_dom.createElement("SYFC_ID");
l_node2.text = _syfc_id;
l_node1.appendChild(l_node2);
alert(xml_dom.xml);
//strXmlParamString +="<SYFC_ID>" + _syfc_id + "</SYFC_ID>";
//图片类型
var l_node3 = xml_dom.createElement("filetype");
l_node3.text = filetype;
l_node1.appendChild(l_node3);
//图片标题
var l_node4 = xml_dom.createElement("fileTitle");
var fileTitle = _getFileTitle(index);
l_node4.text = fileTitle;
l_node1.appendChild(l_node4);
//图片描述
var l_node5 = xml_dom.createElement("fileDesc");
var fileDesc = _getFileDesc(index);
l_node5.text = fileDesc;
l_node1.appendChild(l_node5);
//图片内容 base64存储
var l_node6 = xml_dom.createElement("fileContent");
l_node1.appendChild(l_node6);
l_node6.dataType = "bin.base64";
var ado_stream = new ActiveXObject("ADODB.Stream");
ado_stream.Type = 1; // 1=adTypeBinary
ado_stream.Open();
ado_stream.LoadFromFile(filename);
l_node6.nodeTypedValue = ado_stream.Read(-1); // -1=adReadAll
ado_stream.Close();
}
}
var strURL = 'cmdSaveFiles.aspx';
var strResult = ExecServerPrgm(strURL, 'POST', 'param=' + xml_dom.xml);
//alert(_syfc_id+ "--" + _type);
if (strResult == -1)
{
alert ('执行该操作时出现异常!可能您的登录已经失效。请重新登录后重试。');
}else
{
if (strResult.toUpperCase() == 'TRUE')
{
alert ('保存成功!');
}
else
{
alert ('保存出错!请重新保存!');
}
}
} --------------------编程问答-------------------- 代码太乱,看不清 --------------------编程问答-------------------- up --------------------编程问答-------------------- up --------------------编程问答-------------------- 你是哪里出问题 没说啊
等高手 --------------------编程问答-------------------- Convert.FromBase64String来解析数据的时候提示
Base-64 字符数组的无效长度。
在C#后台中,无需base64解码,直接以一个数组参数接收数据即可。
比如:
public string UploadSoundFileData(string FileName, byte[] filedata)
{
string filePath = "C:\\"+FileName;
try
{
using (FileStream fs = File.Open(filePath, FileMode.Create))
{
fs.Write(filedata, 0, filedata.Length);
}
}
catch (Exception ex)
{
return ex.Message;
}
return "ok";
} --------------------编程问答-------------------- 这样不行。。存的文件大小和原文件不一致。而且图片文件打开什么也没有! --------------------编程问答-------------------- 不知道谁有做过类似的。利用javascript、xml和xmlhttp上传文件的?弄了好几天了。都没有办法。郁闷啊! --------------------编程问答-------------------- 应该可以的,我以前写的上传文件都是这样写的呀,你先在服务器端保存成文件看看能不能打开,如果可以打开,但存到数据库中后就不行了,那可能是在保存到数据库中的时候编码或者其它的问题引起的。
补充:.NET技术 , ASP.NET