代码之家  ›  专栏  ›  技术社区  ›  Alon Gubkin

如何设置HTML文件输入的值?

  •  270
  • Alon Gubkin  · 技术社区  · 15 年前

    注:

    下面的答案和注释反映了2009年传统浏览器的状态。现在,您可以在2017年使用javascript和数据传输或文件列表对象动态/编程地设置文件输入元素的值。

    有关详细信息和演示,请参阅此问题中的答案:
    How to set file input value programatically (i.e.: when drag-dropping files)?

    如何设置此值?

    <input type="file" />
    
    8 回复  |  直到 15 年前
        1
  •  447
  •   Dave Powers    9 年前

    由于安全原因,您不能这样做。

    想象:

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

    你不希望你访问的网站能够做到这一点,是吗?=)

        2
  •  114
  •   Guffa    15 年前

    你不能。

    设置文件输入值的唯一方法是由用户选择文件。

    这样做是出于安全考虑。否则,您将能够创建一个javascript,它自动从客户机上传特定的文件。

        3
  •  47
  •   Wim    15 年前

    不是对您的问题的回答(其他人已回答),但如果您希望具有上载文件字段的某些编辑功能,您可能需要做的是:

    • 只需打印文件名或URL、可单击的下载链接,或者如果是图像,则显示此字段的当前值:只需显示它,可能是缩略图。
    • 这个 <input> 标记以上载新文件
    • 一个复选框,选中该复选框后,将删除当前上载的文件。请注意,无法上载“空”文件,因此需要这样做才能清除字段值。
        4
  •  32
  •   Robin Kanters    8 年前

    你不能。这是安全措施。想象一下,如果有人将设置文件输入值的JS写入某个敏感数据文件?

        5
  •  0
  •   HoldOffHunger Lux    6 年前

    正如这里其他人所说: 不能使用javascript自动上载文件。

    然而! 如果您有权使用您的代码(即不是passwords.txt)发送信息,那么您可以将其作为 斑点 -键入,然后将其视为文件。

    服务器最终将看到的内容与实际设置 <input type="file" /> .最后,技巧是从服务器开始一个新的xmlhttpRequest()。

    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?'});
    
        6
  •  0
  •   msillano    6 年前

    1)文件输入的默认值问题不是“出于安全原因”,而是浏览器“没有很好的理由,没有实现”:见 deep report

    2)一个简单的解决方案是在文件输入的顶部使用文本输入, like here .当然,您需要一些代码来发送文件,现在使用的是文本输入中的值,而不是文件输入。

    在我的例子中,做HTA应用程序,这不是问题,我根本不使用表单。

    最尊重 M.S.

        7
  •  -3
  •   djperalta    7 年前

    在HTML中定义:

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

    在JS中:

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

    之后:

    <input type="hidden" name="image" id="image" value="/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8U..."/>
    <button type="submit">Submit</button>
    
        8
  •  -7
  •   uma    7 年前

    实际上我们可以做到。 我们可以通过使用formtomultipartpostdata库在c中使用webbrowser控件来设置文件的默认值。我们必须下载该库并将其包含在我们的项目中。WebBrowser允许用户在表单内导航网页。 加载网页后,将执行WebBrowser1_文档中的脚本completed。 所以,

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
           FormToMultipartPostData postData = 
                new FormToMultipartPostData(webBrowser1, form);
            postData.SetFile("fileField", @"C:\windows\win.ini");
            postData.Submit();
        }
    

    有关下载和完整参考,请参阅以下链接。

    https://www.codeproject.com/Articles/28917/Setting-a-file-to-upload-inside-the-WebBrowser-com