How to set a value to a file input in HTML?

前端 未结 8 1498
天命终不由人
天命终不由人 2020-11-21 04:45

How can I set the value of this?


相关标签:
8条回答
  • 2020-11-21 05:09

    You cannot, due to security reasons.

    Imagine:

    <form name="foo" method="post" enctype="multipart/form-data">
        <input type="file" value="c:/passwords.txt">
    </form>
    <script>document.foo.submit();</script>
    

    You don't want the websites you visit to be able to do this, do you? =)

    0 讨论(0)
  • 2020-11-21 05:15

    Not an answer to your question (which others have answered), but if you want to have some edit functionality of an uploaded file field, what you probably want to do is:

    • show the current value of this field by just printing the filename or URL, a clickable link to download it, or if it's an image: just show it, possibly as thumbnail
    • the <input> tag to upload a new file
    • a checkbox that, when checked, deletes the currently uploaded file. note that there's no way to upload an 'empty' file, so you need something like this to clear out the field's value
    0 讨论(0)
  • 2020-11-21 05:16

    You can't. And it's a security measure. Imagine if someone writes JS that sets file input value to some sensitive data file?

    0 讨论(0)
  • 2020-11-21 05:20

    As everyone else here has stated: You cannot upload a file automatically with JavaScript.

    HOWEVER! If you have access to the information you want to send in your code (i.e., not passwords.txt), then you can upload it as a blob-type, and then treat it as a file.

    What the server will end up seeing will be indistinguishable from someone actually setting the value of <input type="file" />. The trick, ultimately, is to begin a new XMLHttpRequest() with the server...

    function uploadFile (data) {
            // define data and connections
        var blob = new Blob([JSON.stringify(data)]);
        var url = URL.createObjectURL(blob);
        var xhr = new XMLHttpRequest();
        xhr.open('POST', 'myForm.php', true);
    
            // define new form
        var formData = new FormData();
        formData.append('someUploadIdentifier', blob, 'someFileName.json');
    
            // action after uploading happens
        xhr.onload = function(e) {
            console.log("File uploading completed!");
        };
    
            // do the uploading
        console.log("File uploading started!");
        xhr.send(formData);
    }
    
        // This data/text below is local to the JS script, so we are allowed to send it!
    uploadFile({'hello!':'how are you?'});
    

    So, what could you possibly use this for? I use it for uploading HTML5 canvas elements as jpg's. This saves the user the trouble of having to open a file input element, only to select the local, cached image that they just resized, modified, etc.. But it should work for any file type.

    0 讨论(0)
  • 2020-11-21 05:20

    Define in html:

    <input type="hidden" name="image" id="image"/>
    

    In JS:

    ajax.jsonRpc("/consulta/dni", 'call', {'document_number': document_number})
        .then(function (data) {
            if (data.error){
                ...;
            }
            else {
                $('#image').val(data.image);
            }
        })
    

    After:

    <input type="hidden" name="image" id="image" value="/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8U..."/>
    <button type="submit">Submit</button>
    
    0 讨论(0)
  • 2020-11-21 05:24

    You can't.

    The only way to set the value of a file input is by the user to select a file.

    This is done for security reasons. Otherwise you would be able to create a JavaScript that automatically uploads a specific file from the client's computer.

    0 讨论(0)
提交回复
热议问题