mikevandike
asked on
Microsoft.XMLHTTP sending a file
Hi I am currently re-developing a web based front end for an estate agent to manage their propertys. I have decided to use a Microsoft.XMLHTTP object to communicate between the client and server. My problem is got to do with sending a file with this. The client is composed of the usual GUI components which the data can be easily retrieved from for sending to the server but it also contains a file element for selecting a picture of the property to be uploaded. How do I get the data from this so that it can be uploaded to the server using the Microsoft.XMLHTTP object. I have found a bit of code on the net but it is no use to me because it would involve changing the security in "Internet Options" which I have no control over.
<HTML>
<HEAD><TITLE>File Send</TITLE></HEAD>
<BODY>
<INPUT id=btn_send name="btn_send" type=button value="FILE SEND">
<DIV id=div_message>Ready</DIV>
</BODY>
</HTML>
<SCRIPT LANGUAGE=JavaScript>
// files upload function
function btn_send.onclick()
{
// create ADO-stream Object
var ado_stream = new ActiveXObject("ADODB.Strea m");
// create XML document with default header and primary node
var xml_dom = new ActiveXObject("MSXML2.DOMD ocument");
xml_dom.loadXML('<?xml version="1.0" ?> <root/>');
// specify namespaces datatypes
xml_dom.documentElement.se tAttribute ("xmlns:dt ", "urn:schemas-microsoft-com :datatypes ");
// create a new node and set binary content
var l_node1 = xml_dom.createElement("fil e1");
l_node1.dataType = "bin.base64";
// open stream object and read source file
ado_stream.Type = 1; // 1=adTypeBinary
ado_stream.Open();
ado_stream.LoadFromFile("c :\\sold.gi f");
// store file content into XML node
l_node1.nodeTypedValue = ado_stream.Read(-1); // -1=adReadAll
ado_stream.Close();
xml_dom.documentElement.ap pendChild( l_node1);
// we can create more XML nodes for multiple file upload
// send XML documento to Web server
var xmlhttp = new ActiveXObject("Microsoft.X MLHTTP");
xmlhttp.open("POST","http://www.google.com",fal se);
xmlhttp.send(xml_dom);
// show server message in message-area
div_message.innerHTML = xmlhttp.ResponseText;
}
</SCRIPT>
thanks
John.
<HTML>
<HEAD><TITLE>File Send</TITLE></HEAD>
<BODY>
<INPUT id=btn_send name="btn_send" type=button value="FILE SEND">
<DIV id=div_message>Ready</DIV>
</BODY>
</HTML>
<SCRIPT LANGUAGE=JavaScript>
// files upload function
function btn_send.onclick()
{
// create ADO-stream Object
var ado_stream = new ActiveXObject("ADODB.Strea
// create XML document with default header and primary node
var xml_dom = new ActiveXObject("MSXML2.DOMD
xml_dom.loadXML('<?xml version="1.0" ?> <root/>');
// specify namespaces datatypes
xml_dom.documentElement.se
// create a new node and set binary content
var l_node1 = xml_dom.createElement("fil
l_node1.dataType = "bin.base64";
// open stream object and read source file
ado_stream.Type = 1; // 1=adTypeBinary
ado_stream.Open();
ado_stream.LoadFromFile("c
// store file content into XML node
l_node1.nodeTypedValue = ado_stream.Read(-1); // -1=adReadAll
ado_stream.Close();
xml_dom.documentElement.ap
// we can create more XML nodes for multiple file upload
// send XML documento to Web server
var xmlhttp = new ActiveXObject("Microsoft.X
xmlhttp.open("POST","http://www.google.com",fal
xmlhttp.send(xml_dom);
// show server message in message-area
div_message.innerHTML = xmlhttp.ResponseText;
}
</SCRIPT>
thanks
John.
ASKER
I am in the process of re-developing a website and am currently working on the admin section for updating the database. I have decided to use some new technologies for doing this as a kind of learning expierence for me. You can check out a prototype at.
http://www.aor.ie/admin/prototype
I am using a servlet to generate XML for the client.
http://www.aor.ie/aor/servlet/XMLData
to get a list of all property Id's.
http://www.aor.ie/aor/servlet/XMLDa...D=1070634500828
to get all Info on an individual property.
My aim really is to try and give the feel of a native application.(page not reloading ect) I have done this kind of thing before and used hidden frames to post the data to the server and callback javascripts. But as I said before It is more of a learning thing for myself than it is necessary. I also am trying to use XML as much as possible because I am interested in its potential usability.
I understand fully the security ricks involved in accessing files on the client side but you would think that once a user selects a file with the File input control you could access it through the code. Why is this not possible.
John.
http://www.aor.ie/admin/prototype
I am using a servlet to generate XML for the client.
http://www.aor.ie/aor/servlet/XMLData
to get a list of all property Id's.
http://www.aor.ie/aor/servlet/XMLDa...D=1070634500828
to get all Info on an individual property.
My aim really is to try and give the feel of a native application.(page not reloading ect) I have done this kind of thing before and used hidden frames to post the data to the server and callback javascripts. But as I said before It is more of a learning thing for myself than it is necessary. I also am trying to use XML as much as possible because I am interested in its potential usability.
I understand fully the security ricks involved in accessing files on the client side but you would think that once a user selects a file with the File input control you could access it through the code. Why is this not possible.
John.
ASKER
Also it there a cross browser version of the Microsoft.XMLDOM object.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
in the part where you create XML nodes using XMLDOM, use simple Javascript
var xmlNodes='<node1><node2>so me data will go here...</node2></node1>';
and send then via xmlhttp
var xmlNodes='<node1><node2>so
and send then via xmlhttp
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
If you use the WinHTTP object like I am suggesting, you will not need to do any client side scripting as others have suggested and the file will go out from the server itself.
Michael
Michael
ASKER
mkrumpe I dont get what you are saying. It is not a microsoft server and the sever side language I am using is Java. All I want to know is once a user selects a file with the normal file input control. Is their any way on the client side I can access that files data without changing the security settings or is the only way to send that file to the server by clicking on a submit button or using form.submit();
mkrumpe, can you please provide a little example of what you are describing..? It is very interestning... :)
The only example I could show you would be in .asp. But the winhttp object should be able to be used by any language.
Is that ok?
Is that ok?
aaah, I think I got what you saying... post data by multipart and then send xml down to the browser using xmlhttprequest right?
here, I opened up another topic
> https://www.experts-exchange.com/questions/21147124/XMLHTTPRequest-Q-continues-from-another-topic.html
> https://www.experts-exchange.com/questions/21147124/XMLHTTPRequest-Q-continues-from-another-topic.html
mkrumpe, post your suggestion in there..
Is there some reason why you have rejected just using a conventional form to submit the data?
This kind a stuff is an invitation to security breaches, especially when you are going send data a as binary stream hidden in XML.
Cd&