Contents
CAN node js write to file?
How do I write files in Node.js? Writing to a file is another of the basic programming tasks that one usually needs to know about – luckily, this task is very simple in Node.js. We can use the handy writeFile method inside the standard library’s fs module, which can save all sorts of time and trouble.
- Fs = require(‘fs’); fs.writeFile(filename, data,, ) file = (string) filepath of the file to write data = (string or buffer) the data you want to write to the file encoding = (optional string) the encoding of the data,
- Possible encodings are ‘ascii’, ‘utf8’, and ‘base64’.
- If no encoding provided, then ‘utf8’ is assumed.
callback = (optional function (err) ) If there is no error, err === null, otherwise err contains the error message. So if we wanted to write “Hello World” to helloworld.txt : fs = require(‘fs’); fs.writeFile(‘helloworld.txt’, ‘Hello World!’, function (err) ); : Hello World! If we purposely want to cause an error, we can try to write to a file that we don’t have permission to access: fs = require(‘fs’) fs.writeFile(‘/etc/doesntexist’, ‘abc’, function (err,data) console.log(data); }); : How do I write files in Node.js?
Pogledajte cijeli odgovor
Can JS write to file?
Writing data to a file can be exceptionally useful for storing your data for longer. You don’t have to worry about losing your data after exiting your program. Every language has had some kind of support for storing data into files with the help of some packages, and JavaScript is no exception.
Pogledajte cijeli odgovor
Can you write an object to a file?
Serialization is a process to convert objects into a writable byte stream. Once converted into a byte-stream, these objects can be written to a file.
Pogledajte cijeli odgovor
How do I write to a file in JSON?
First, to write data to a JSON file, we must create a JSON string of the data with JSON. stringify. This returns a JSON string representation of a JavaScript object, which can be written to a file.
Pogledajte cijeli odgovor
Is NASA using node JS?
Some other key reasons NASA choose Node. js were: The relative ease of developing data transfer applications with JavaScript, and the familiarity across the organization with the programming language, which keeps development time and costs low.
Pogledajte cijeli odgovor
Can strings be written to a file?
Strings can easily be written to and read from a file.
Pogledajte cijeli odgovor
Is js as fast as C?
JavaScript appears to be almost 4 times faster than C++! I let both of the languages to do the same job on my i5-430M laptop, performing a = a + b for 100000000 times. C++ takes about 410 ms, while JavaScript takes only about 120 ms.
Pogledajte cijeli odgovor
Can JavaScript write to a JSON file?
What is JSON? –
JSON stands for J ava S cript O bject N otation JSON is a lightweight data interchange format JSON is language independent * JSON is “self-describing” and easy to understand
* The JSON syntax is derived from JavaScript object notation syntax, but the JSON format is text only. Code for reading and generating JSON data can be written in any programming language.
Pogledajte cijeli odgovor
How do I convert an object to text?
Stringify a JavaScript Array – It is also possible to stringify JavaScript arrays: Imagine we have this array in JavaScript: const arr = ; Use the JavaScript function JSON.stringify() to convert it into a string. const myJSON = JSON.stringify(arr); The result will be a string following the JSON notation. myJSON is now a string, and ready to be sent to a server:
Pogledajte cijeli odgovor
Can you execute object files directly?
3.3. Compiling and Running Programs A computer processor runs programs written in the machine language of that processor. Machine language files are binary, and you cannot read them directly unless you have some very special skills. There are two kinds of machine language file.
An executable file is a complete machine language program. You can run it in a command simply by typing its name (or a path ) as a command. If you want to run an executable file that is in the current directory, write it with,/ in front of it. For example,,/frog runs the executable file called frog in the current directory. An object file is a partial machine language program. It is designed to be linked to other object files to produce an executable file. You cannot run an object file by writing its name as a command.
Machine language files are also called binaries since they use binary notation. They do not contain text that you can read.
Pogledajte cijeli odgovor
Is JSON a file or code?
What is a JSON file? – A JSON file stores data in key-value pairs and arrays; the software it was made for then accesses the data. JSON allows developers to store various data types as human-readable code, with the keys serving as names and the values containing related data. JSON syntax is derived from JavaScript object notation syntax:
Data is in key/value pairs Data is separated by commas Curly braces hold objects Square brackets hold arrays
Building on this, the JSON syntax is not without restrictions. The information provided for the keys and values must match a specific format. For example, all keys must be strings written with double quotes — and this is also true of values with one difference. Keys must be strings, and values must be a valid JSON data type:
string number object array boolean null
However, developers must still write these data types in a string format according to the JSON syntax. So, let’s take a look at what the data inside a JSON file looks like, including the different data types.
Pogledajte cijeli odgovor
Can JSON object send files?
How to upload a file and post JSON data in the same request Hi there, I’m trying to implement an endpoint that allows me to upload a file and post a DTO as JSON together. Routing is working correctly – my service handler method is being triggered and I can break point on it. However, the Request.Files collection is empty and the DTO is null. Below are some code snippets: Request: public class UploadFile : IReturn > } Service handler: public async Task Any(UploadFile request) }
- Sample raw request using HTTPClient in,NET, caught in Fiddler: (file contents truncated for brevity)
- POST HTTP/1.1 Accept: multipart/form-data Authorization: IRA-HMAC Content-Type: multipart/form-data
- Host:
- Expect: 100-continue
- –b4537661-9989-40c1-977b-41dd400fe6c9 Content-Type: application/json; charset=utf-8
- Content-Disposition: form-data
- } –b4537661-9989-40c1-977b-41dd400fe6c9
Content-Length: 491789 Content-Disposition: form-data; name=file; filename=MyFile.pdf; filename*=utf-8”MyFile.pdf
- %PDF-1.7 % 455 0 obj
When I break point on the if statement in the service handler shown above, the Request.Files collection is empty and request.File object is null. Cheers, Annie Hi Annie, First you should remove the File property, you can’t add a property to access a file so just leave it blank. If the request was a valid multipart/form-data it will automatically be accessible from Request.Files, The HTTP Request is also invalid, you shouldn’t have ?format=json which conflicts with the HTTP Request which says sends a multipart/form-data Content Type which is valid for uploading files, but says it only accepts multipart/form-data which isn’t valid for the response type (you likely mean Content-Type: application/json ). Also remove the filename*=utf-8”MyFile.pdf suffix from the Content-Disposition Header as it’s not supported by, I’d consider having a look at the Service Client PostFile* APIs to see what a valid request looks like, e.g: var client = new JsonServiceClient(baseUrl); var fileToUpload = new FileInfo(“path/to/file.txt”); var response = client.PostFile >(“/UploadFile”, fileToUpload); Note: the recommendation is just to have a single concrete Response DTO like UploadFileResponse, i.e. instead of BaseRecordResponse, Hey Demis,
- I’ll give your Content Type suggestions a go – I’m pretty sure I’ve just about tried all combinations but you never know!
- I’ll post back some results shortly.
- Cheers, Annie
Hey Demis, Alright, I’ve tried a few different things but unfortunately I’m still having no luck. Ignore the fact that the Request object has a property of type Type.File with name File because like I said earlier, they are both actually called something else in my real version.
I removed the Accept header (that was just something I was trying). I removed the ?format=json although it means that the response is now returned in HTML which isn’t quite what I want. I manage to remove the filename*=utf-8”MyFile.pdf although this wasn’t so easy! The MultipartFormDataContent.Add() method which takes a filename seems to add this itself.
I ended up using code I found in the Post method here, Sample raw request using HTTPClient in,NET, caught in Fiddler: POST http://ws-local.myhost.com/UploadFile HTTP/1.1 Authorization: IRA-HMAC Content-Type: multipart/form-data Host: ws-local.myhost.com Content-Length: 491704 Expect: 100-continue -MyGreatBoundary Content-Type: application/json; charset=utf-8 Content-Disposition: form-data } -MyGreatBoundary Content-Disposition: form-data; name=filecontents; filename=MyFile.pdf %PDF-1.7 % 455 0 obj >stream What else could be going wrong? Is there something I need to enable in AppHost.cs to allow multipart/form-data posts? Or on the request object? Cheers, Annie The Accept header should be changed to application/json in order to get a JSON response. Also try upgrading to the latest version of ServiceStack if not already. There’s nothing needed to enable File Uploads, this is automatically made available by when a valid request is sent. ServiceStack doesn’t get in the way here, it’s just making ‘s Uploaded Files available. You can get it directly from Request object with: var aspReq = base.Request.OriginalRequest as HttpRequestBase; aspReq.Files.Count; So I’m assuming the HTTP Upload request isn’t valid. Can you try using the JsonServiceClient and its PostFile API example shown above or PostFilesWithRequest if you also want to send a Request DTO, e.g: var client = new JsonServiceClient(baseUrl); var fileToUpload = new FileInfo(“path/to/file.txt”); var requestDto = new UploadFile ; var response = client.PostFileWithRequest >( “/UploadFile”, fileToUpload, requestDto); We also have an you can use if it’s more flexible. Otherwise if you can put together a small stand-alone repro (e.g. on Github) I’ll be able to identify the issue. Sorry to sound like an idiot here but where can I try out this JsonServiceClient you speak of? Never mind, I found it! Trying it out now Also, bear in mind we have stitched in our own custom authentication / authorisation as well as serialisation / deserialisation which would be happening before the service handler gets hit. Could it be that any of that is getting in the way? Perhaps reading or modifying the stream? Here are the contents of the Request object when I breakpoint on it: Request AbsoluteUri: “http://ws-local.myhost.com/UploadFile” AcceptTypes: null BufferedStream: Container: null ContentLength: 491763 ContentType: “multipart/form-data” Cookies: Count = 0 Dto: Files: FormData: HasExplicitResponseContentType: false Headers: HttpMethod: “POST” HttpRequest: HttpResponse: InputStream: IsLocal: true IsSecureConnection: false Items: Count = 3 OperationName: “UploadFile” OriginalRequest: PathInfo: “/UploadFile” QueryString: RawUrl: “/UploadFile” RemoteIp: “10.23.105.195” RequestAttributes: LocalSubnet | InSecure | HttpPost | Reply | Html RequestPreferences: Response: ResponseContentType: “text/html” UrlHostName: “ws-local.myhost.com” UrlReferrer: null UseBufferedStream: true UserAgent: null UserHostAddress: “10.23.105.195” Verb: “POST” XForwardedFor: null XForwardedPort: null XForwardedProtocol: null XRealIp: null cookies: Count = 0 formData: headers: httpFiles: httpMethod: “POST” items: Count = 3 queryString: remoteIp: “10.23.105.195” request: response: responseContentType: “text/html” The JsonServiceClient is apart of which is a big part of ServiceStack’s end to end story. From looking at your Web Service example it looks like you’re fighting ServiceStack at multiple points, i.e. your own Response DTO base class instead of a normal concrete DTO using the built-in ResponseStatus, your own error handling instead of using ServiceStack’s which automatically converts C# Exceptions into structured HTTP Error Handling, your own Authentication implementation instead of a, your own serialization/deserialization, client library, use of nested classes, etc. There looks like a lot of customization being done here instead of taking advantage of the built-in tested and free functionality in ServiceStack which also means you need to ensure that your custom functionality is implemented and works together correctly. The issue here is that your HTTP Request for some reason isn’t being recognized as a valid File Upload request in which is indicated by Request.Files.Count == 0, Out of all the different customization being used, reading the Request Input Stream could have an effect here. If I were you I’d look at peeling back everything, getting to a working state then adding back your functionality one-by-one to see what’s causing the issue. To provide a starting point I’ve created a new and added a : public object Post(UploadFile request) ; } That mimics the details you’ve provided in this thread, available on Github at: Which can be downloaded directly from Github: After you hit Ctrl+F5 to run your projects you can to see a working example, I’ve added both a normal File Upload: private const string BaseUrl = “http://localhost:61557/”; public void Can_upload_file() As well as a File Upload with Request DTO to see how you could do either public void Can_upload_file_with_Request(), fieldName: “file”); Assert.That(response.Name, Is.EqualTo(“file”)); Assert.That(response.FileName, Is.EqualTo(“file.json”)); Assert.That(response.ContentLength, Is.EqualTo(fileInfo.Length)); Assert.That(response.Contents, Is.EqualTo(fileInfo.ReadAllText())); Assert.That(response.File, Is.EqualTo(“Request DTO Property”)); } Hey Demis, Alright, I’ve made some good progress! Thanks for recommending I look at the JsonServiceClient it did help.
So this is the current situation: File upload: I can upload a file now! The reason the request was ‘invalid’ is because I didn’t have a boundary defined in the Content-Type up at the top of the request – I had Content-Type: multipart/form-data where it should really have been more like Content-Type: multipart/form-data; boundary=-8d429a61b15bb9a,
The reason this wasn’t being output automatically is because I was manually setting the Content-Type to multipart/form-data thinking it wouldn’t get set automatically. But doing so means that the boundary doesn’t come through. So I learnt something new! DTO: Unfortunately I’m still having a little bit of trouble with this.
- I was adding the request object to the MultipartFormDataContent object like this: content.Add(ObjectContent (value, formatter)); where value is the request object and formatter is a JsonMediaTypeFormatter we’re using to ignore null values. We’ve been using this for all our test POSTs to endpoints and so far it’s worked perfectly.
-
- This generates the following request headers:
- Content-Type: application/json; charset=utf-8 Content-Disposition: form-data
- }
- This does not get deserialised in the service handler. The request.File object is null. It seems I need to specifically add the name of each property in the request.
- I tried adding the name of the property that I’m interested in, File to the ObjectContent, e.g. content.Add(ObjectContent (value, formatter), “File”);, This also didn’t work.
- I tried adding the name of the property with double quotes around it, e.g. content.Add(ObjectContent (value, formatter), “\”File\””);, This worked – request.File was no longer null in the service handler. However, all it’s properties were still null.
- The only differences between the requests generated by the JsonServiceClient and my own code now are that the JsonServiceClient sends the request DTOs as ContentType = text/plain where as I send it as ContentType = application/json and you don’t have quotes around the values of each property in the DTO, e.g. } versus }
- I had a look in your ServiceClientBase.cs (around line 1614) and noticed that you set up the web request far more manually than what I’ve been trying to pull off. You serialise the request object to a ‘query string’ – var queryString = QueryStringSerializer.SerializeToString(value); and then into a INameValueCollection var nameValueCollection = PclExportClient.Instance.ParseQueryString(queryString);, You also set the ContentType manually, to text/plain – outputStream.Write($”Content-Type: text/plain;charset=utf-8 “);, I’ve replicated this in my own code, and am now adding the DTO keys + values as StringContent which results in the same ContentType as you had (text/plain) and no quotes. And now it all works!!
So, I’m happy with the file upload part now but am not convinced about the DTO deserialisation issues. I think we should be posting this as application/json ContentType, not text/plain, Our front-end normally sends us JSON with property names and values wrapped in quotes (as per my first attempts) but I’m not sure if the issue is the extra quotes I had or the ContentType.
- Anyway, do you have any idea why it won’t deserialise the request DTO if it’s not sent as text/plain ? Hi Annie, Glad you resolved your File Upload issue.
- The Request DTO, i.e: outputStream.Write($$”Content-Disposition: form-data;name=\” \” “); outputStream.Write($$”Content-Type: text/plain;charset=utf-8 “); outputStream.Write(nameValueCollection + newLine); In order to populate Request.Form Data property which is what’s used to populate the Request DTO.
Where as sending as JSON would have no correlation with the Request DTO and binding would fail. To clarify, it’s being sent as form-data, which is how HTML/HTTP sends additional POST metadata along with multipart File Uploads, i.e. it’s not being sent as text/plain – that only refers to the value part of the key/value pair.
Hey Demis, In both cases (failing and working), the Content-Disposition for the request DTO key/value pair set to form-data, What I had to change to make it work was the Content-Type header for the request DTO key/value pair, from: Content-Type: application/json; charset=utf-8 To: Content-Type: text/plain; charset=utf-8 That still doesn’t really make sense to me? What doesn’t make sense? It specifies the Content-Type for the value of the form-data which needs to be text/plain,
This form-data is used to populate the Request.Form name/value collection which is what’s used to populate the Request DTO. Because we want to post the DTO ( value ) as JSON so that would suggest setting the Content-Type to application/json, not text/plain,
For example, see in this post – – the suggested answer also suggests setting the Content-Type to application/json : -HereGoes Content-Disposition: form-data; name=”myJsonString” Content-Type: application/json But when I try this (plus charset=utf-8) in my example, the Request DTO doesn’t get populated.
It doesn’t get populated because doesn’t recognize it as valid Form Data, just leave it as text/plain, : How to upload a file and post JSON data in the same request
Pogledajte cijeli odgovor
Can I write in a JSON file in JS?
Can JavaScript write to a JSON file? – If we want to write something in a JSON file using JavaScript, we will first need to convert that data into a JSON string by using the JSON. stringify method. Above, a client object with our data has been created which is then turned into a string. This is how we can write a JSON file using the fileSystem.
Pogledajte cijeli odgovor