[英]How to set a value to a file input in HTML?
我该如何设置这个值?
<input type="file" />
由于安全原因,您不能将其设置为客户端磁盘文件系统路径。
想象:
<form name="foo" method="post" enctype="multipart/form-data">
<input type="file" value="c:/passwords.txt">
</form>
<script>document.foo.submit();</script>
您不希望您访问的网站能够做到这一点,是吗? =)
您只能将其设置为可公开访问的 Web 资源,如本答案所示,但这显然与客户端磁盘文件系统路径不同,因此在该上下文中没有用。
你不能。
设置文件输入值的唯一方法是由用户选择文件。
这样做是出于安全原因。 否则,您将能够创建一个自动从客户端计算机上传特定文件的 JavaScript。
不是您的问题的答案(其他人已回答),但如果您想对上传的文件字段进行一些编辑功能,您可能想要做的是:
<input>
标签上传一个新文件你不能。 这是一种安全措施。 想象一下,如果有人编写将文件输入值设置为某些敏感数据文件的 JS?
正如这里的其他人所说:您不能使用 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 的。 这让用户不必打开file
input
元素,只需选择他们刚刚调整大小、修改等的本地缓存图像。但它应该适用于任何文件类型。
我已经写了完整的例子来加载 URL 到输入文件,并预览 你可以在这里查看1 https://vulieumang.github.io/vuhocjs/file2input-input2file/
总之你可以使用这个功能
function loadURLToInputFiled(url){
getImgURL(url, (imgBlob)=>{
// Load img blob to input
// WIP: UTF8 character error
let fileName = 'hasFilename.jpg'
let file = new File([imgBlob], fileName,{type:"image/jpeg", lastModified:new Date().getTime()}, 'utf-8');
let container = new DataTransfer();
container.items.add(file);
document.querySelector('#file_input').files = container.files;
})
}
// xmlHTTP return blob respond
function getImgURL(url, callback){
var xhr = new XMLHttpRequest();
xhr.onload = function() {
callback(xhr.response);
};
xhr.open('GET', url);
xhr.responseType = 'blob';
xhr.send();
}
您需要创建一个 DataTransfer 并设置输入的 .files 属性。
const dataTransfer = new DataTransfer();
dataTransfer.items.add(myFile);//your file(s) reference(s)
document.getElementById('input_field').files = dataTransfer.files;
在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 Library 在 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.