Forum Discussion
AustinK
5 years agoQrew Commander
I see where you had posted about this previously and even see the thread you posted in. https://community.quickbase.com/communities/community-home/digestviewer/viewthread?MessageKey=1ffadf07-9840-4550-a49d-c2b3f1dde0fa&CommunityKey=d860b0f8-6a48-487b-b346-44c47a19a804&tab=digestviewer
These are in JavaScript because afaik this cannot be done in a native way, I don't think. I see you replied to Dan there, is the issue that you need the script adapted to your exact use case? Have you given it a try at all and do you have anything started that can be worked off of?
To make the code in the post you replied to work you will need some changes. That specific code works by looking for a change in a field on the form which sounds different than what you want. Can you describe the exact workflow you expect here? To me it sounds like you need this: The record opens and the script runs and pulls the size of the file attachment, It then compares this size to the size in a field called "File Attachment - Old Size" and if the current value is smaller than that value it marks a checkbox saying the record is complete, if there is no older value it puts the current value into the "File Attachment - Old Size" field. Something like that?
These are in JavaScript because afaik this cannot be done in a native way, I don't think. I see you replied to Dan there, is the issue that you need the script adapted to your exact use case? Have you given it a try at all and do you have anything started that can be worked off of?
To make the code in the post you replied to work you will need some changes. That specific code works by looking for a change in a field on the form which sounds different than what you want. Can you describe the exact workflow you expect here? To me it sounds like you need this: The record opens and the script runs and pulls the size of the file attachment, It then compares this size to the size in a field called "File Attachment - Old Size" and if the current value is smaller than that value it marks a checkbox saying the record is complete, if there is no older value it puts the current value into the "File Attachment - Old Size" field. Something like that?
MichaelTamoush
5 years agoQrew Captain
Austin,
Now I remember why I couldn't figure things out in the last thread. All the examples don't allow the user to upload the file if it is too large. It gives an alert message. I want to allow the user to upload a larger file. I simply want to know what size the file is (for various reasons this is helpful to me). Bonus points if you can actually reduce the file size to a pre-set width/height on upload, but I suspect that isn't possible.
------------------------------
Mike Tamoush
------------------------------
Now I remember why I couldn't figure things out in the last thread. All the examples don't allow the user to upload the file if it is too large. It gives an alert message. I want to allow the user to upload a larger file. I simply want to know what size the file is (for various reasons this is helpful to me). Bonus points if you can actually reduce the file size to a pre-set width/height on upload, but I suspect that isn't possible.
------------------------------
Mike Tamoush
------------------------------
- AustinK5 years agoQrew CommanderDoes the user open an already made record and then try and upload something over another attachment that is already there in the field every single time?
I see the issue you are talking about. It seems to me that when you load the form and before you choose a file to be uploaded, the file attachment field has a different set of data than after you choose a file to upload. At first it contains the data that was already in there when you opened the record. After you choose a file and even before you hit save, querying the same field will instead give you data based on what you are about to upload. But annoyingly it does not seem to give you the file size of the file that is already uploaded.
I found a way but it feels extremely backwards and I think it could probably be done in a better way...
Here is another code snippet from Dan. This one will pull the current files size out for you. I have investigated other ways to do this and I am not sure how else but maybe someone else can help. https://haversineconsulting.quickbase.com/db/bgcwm2m4g?a=dr&r=kp&rl=cw7
That works but you will be doing a promise and an ajax call from every single record when it loads.
Set your URL up correctly and add to this code below and then use the rest of this code and it will print the current file size to your console.
var promise = $.ajax({
url: url,
type: "HEAD"
});
$.when(promise).then(function() {
var size = promise.getResponseHeader("Content-Length");
console.log(size)
});
You would need to use some combination of the first code that was posted with the above code. It would need to grab the current file size from the record on form load before anything else happens. Then it would watch for changes to the field you set and when a change happens it could grab that file size and compare it to the one you pulled on form load. JavaScript isn't a specialty of mine but you will also need to make sure to keep everything within the same scope, or possibly make your first size variable into a global but that isn't great practice usually.
$("#_fid_31").on("change", function(e) {
var data = e.originalEvent.target.files[0];
if (data.size < uploadingFile.size) {
alert('Your file size is larger than the currently uploaded file. Please select a smaller file.');
this.value = "";
else {
DoYourElseStuffHereIfNeeded();
}
}
});
Let me know if I can clarify anything here. I know it isn't a full answer but it is a lot of the needed pieces.- MichaelTamoush5 years agoQrew CaptainThanks Austin. I'll look into all this. This may be a little more advanced than my skill level.
I do not know what a promise and ajax call is. Is this bad to do on every instance?
And to your earlier question, 99% of the time the user will be creating a new record and adding a file to a new entry. In rare instances. they will be overwriting an existing file.
------------------------------
Mike Tamoush
------------------------------- AustinK5 years agoQrew CommanderIf they are almost always uploading to a blank record then when the file attachment field changes you could store the file size they are uploading and then when they click save(could be your own save button) it could fire off an EditRecord and add that files size to a field. Then when a record that is eventually opened that has a file already uploaded you should have a field already filled out with the previous files size to compare to. This does not help with current file attachments though, which is the bad part.
Doing a promise isn't bad, a promise is just something in the code that will eventually return a value, it promises to and you wait for it. The "$.when(promise).then(" line is waiting for the promise var to contain something and not be null to proceed in the code. Doing the ajax call on every single link is probably not great though. It is loading the file and then checking the headers to see information about it. So it will need to load every single file to do this which seems wasteful. Quick Base can see the file size of an uploaded file in the file history so it is very frustrating that they do not offer a good way to grab that with an API call, that would fix this easily.
I think there must be something I am overlooking here. I will try and look into this a bit more later because I would not mind being able to know the file size of a file that is already uploaded too.