如何设置它的值?

<input type="file" />

当前回答

正如这里的其他人所说:不能用JavaScript自动上传任何文件。

然而!如果您可以访问想要在代码中发送的信息(即,不是C:\passwords.txt),那么您可以将其作为blob类型上传,然后将其作为文件处理。

服务器最终看到的内容将与某人实际设置<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?'});

那你能用这个做什么呢?我用它上传HTML5画布元素为jpg格式。这为用户省去了不得不打开文件输入元素的麻烦,只能选择他们刚刚调整大小、修改等的本地缓存图像。但它应该适用于任何文件类型。

其他回答

正如这里的其他人所说:不能用JavaScript自动上传任何文件。

然而!如果您可以访问想要在代码中发送的信息(即,不是C:\passwords.txt),那么您可以将其作为blob类型上传,然后将其作为文件处理。

服务器最终看到的内容将与某人实际设置<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?'});

那你能用这个做什么呢?我用它上传HTML5画布元素为jpg格式。这为用户省去了不得不打开文件输入元素的麻烦,只能选择他们刚刚调整大小、修改等的本地缓存图像。但它应该适用于任何文件类型。

出于安全考虑,不能将其设置为客户端磁盘文件系统路径。

想象一下:

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

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

您只能将其设置为一个公共可访问的web资源,如答案所示,但这显然与客户端磁盘文件系统路径不同,因此在该上下文中它是无用的。

在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>

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

实际上我们可以这么做。 我们可以使用c#中的webbrowser控件使用FormToMultipartPostData库来设置文件的默认值。我们必须下载这个库并将其包含在我们的项目中。Web浏览器使用户能够在表单内浏览网页。 一旦网页加载,webBrowser1_DocumentCompleted中的脚本将被执行。 所以,

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