注意:
以下答案与评论反映了2009年旧版浏览器的状态。现在,您实际上可以在2017年使用JavaScript和dataTransfer或FileList对象动态/以编程方式设置文件输入元素的值。
有关详细信息和演示,请参见此问题的答案:
如何以编程方式设置文件输入值(即:拖放文件时)?
如何设置此值?
<input type="file" />
注意:
以下答案与评论反映了2009年旧版浏览器的状态。现在,您实际上可以在2017年使用JavaScript和dataTransfer或FileList对象动态/以编程方式设置文件输入元素的值。
有关详细信息和演示,请参见此问题的答案:
如何以编程方式设置文件输入值(即:拖放文件时)?
如何设置此值?
<input type="file" />
Answers:
由于安全原因,您不能。
想像:
<form name="foo" method="post" enctype="multipart/form-data">
<input type="file" value="c:/passwords.txt">
</form>
<script>document.foo.submit();</script>
您不希望所访问的网站能够做到这一点,对吗?=)
不是您的问题的答案(其他人都回答了),但是如果您希望对上传的文件字段具有某些编辑功能,则可能需要做的是:
<input>
标签上传新文件<input type="file" />
为现有产品图像?我可以在<img />
标签中显示现有图像,但是提交时没有文件通过。
正如这里的其他所有人所说:您不能使用JavaScript自动上传文件。
然而! 如果您有权访问要在代码中发送的信息(即,没有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。这为用户省去了打开file
input
元素,仅选择刚刚调整大小,修改等的本地缓存图像的麻烦。但是,它适用于任何文件类型。
在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>
实际上我们可以做到。我们可以使用FormToMultipartPostData库在c#中使用webbrowser控件来将文件值设置为默认值。我们必须下载该库并将其包含在我们的项目中。Webbrowser使用户可以导航表单内的网页。加载网页后,将执行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