How to share file object from sketchup to javascript

Hi!

This is a late reply to “How to share file object from sketchup to javascript?”. Here’s how to load the content of a file from JavaScript code, running embedded in SketchUp (2017-2020), in an HtmlDialog. We can “simply” make an XMLHttpRequest object and point it to the local full path of the file. I expected the JavaScript code to deny such a request, but it doesn’t. I guess it’s either because it’s running embedded, or because I’m using htmldialog.set_file, which gives the dialog box a URL that is from a local file as well (I didn’t try with htmldialog.set_html or set_url).

The html contains:

   <script type="text/javascript">
	function send_file(absolute_file_path) {
	    var req = new XMLHttpRequest();
	    req.onload = function () {
	        var blob = req.response;   // or req.responseText if you want plain text
	        if (blob == null) {
	            // oops, file couldn't be read
	        }
	        else {
	            // blob contains the file content.
	            // example usage: send it out with POST
	            var formdata = new FormData();
	            formdata.set("description", "...");
	            formdata.set("file", blob);

	            var upreq = new XMLHttpRequest();
	            upreq.onload = function () {
	                // should check for success or failure
	            }
	            upreq.open("POST", "https://example.com/upload");
	            upreq.send(formdata);
	        }
	    }
	    req.responseType = "blob";   // could be "text" if you expect a text file
	    req.open("GET", absolute_file_path);
	    req.send(null);
	}
</script>

This will be useful for my use case because I want to send the file’s content as part of a WebSocket connection, which is not supported by Ruby. Also, I’m trusting the browser’s support for “https” to stay very up-to-date, unlike the one included with an old version of Ruby linked with an old version of OpenSSL.

Hope it is useful to someone else.