设置文件上传字段值- Javascript/jQuery

Setting a file upload field value - Javascript/jQuery

本文关键字:Javascript jQuery 字段 文件 设置      更新时间:2023-09-26

我有一个表单页面,有一个文件上传字段,我试图以编程方式设置该字段的值,虽然我知道由于安全原因这是不可能的,我想知道我们是否仍然可以?如果有一个插件或东西,我可以用它来执行上传。我有设置该字段所需的文件字段的Base64值,我只需要知道是否有一种方法来设置它。

在这方面任何建议或帮助将是伟大的。

谢谢。

更新:添加了一个JsFiddle来演示我正在尝试的内容。

请访问这个网站,使用js中的示例创建一个文本文件,并使用这个链接转换它。

var str = `text`;
http://www.motobit.com/util/base64-decoder-encoder.asp

JsFiddle

注意:

下面的答案反映了2009年传统浏览器的状态。现在你可以在2017年使用JavaScript动态/编程地设置文件输入元素的值了。


如何以编程方式设置文件输入值(即:当拖放文件时)?

您可以将base64字符串转换为blob,然后在使用ajax请求提交之前将其添加到formData:

$("#form").submit(function(e) {
  e.preventDefault();
  formData = new FormData($(this)[0]);
  var blob = dataURLtoBlob("base64 string");
  formData.append("yourfile", blob);
  $.ajax({
    url: "whatever.php",
    type: "POST",
    data: formData,
    contentType: false,
    cache: false,
    processData: false,
    success: function(data) {
      alert("Form has been submitted with file");
    }
});

dataURLtoBlob是一个函数,将base64字符串转换为二进制文件(blob)来源:blob from DataURL?

更新:添加了一个JsFiddle来演示我正在尝试的内容。

@seahorsepip答案,最小限度地调整为用success代替done,这不是一个定义的$.ajax()设置,并在done:function(){}之后删除尾随的;,这记录了语法错误,应该返回预期的结果。其中convertedvalue在链接的jsfiddle在更新的问题也调整为有效的data URI。也就是说,在将字符串转换为base64之后,使用"data"URL方案将base64字符串转换为有效的data URI;例如,

"data:text/plain;base64," + convertedvalue

注意,FormData创建的File对象与GET一起被请求,并在success的stacksnippets和jsfiddle中返回FormDataPOST中的$.ajax()

var convertedvalue = btoa(str); // where `str` is string
$("#form").submit(function(e) {
  e.preventDefault();
  formData = new FormData($(this)[0]);
  // pass valid `data URI` to `dataURItoBlob`
  // note `base64` extension
  var blob = dataURItoBlob("data:text/plain;base64," + convertedvalue);
  formData.append("yourfile", blob);
  $.ajax({
    url: "/path/to/server",
    type: "POST",
    data: formData,
    contentType: false,
    cache: true,
    processData: false,
    // substitute `success` for `done`
    success: function(data) {
      //alert("Form has been submitted with file");
    } // remove trailing `;`
  });
})

var str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras suscipit pharetra ante, quis tristique elit tempor at. Mauris nec nisi porttitor, sodales nunc facilisis, tempor ligula. Aenean luctus purus id orci commodo, eu ornare erat molestie. Proin viverra semper est, sit amet hendrerit mi. Phasellus sodales auctor ipsum eu fermentum. Quisque ut convallis turpis. Suspendisse et varius lorem. Quisque ipsum metus, venenatis quis aliquam et, lobortis nec purus. Aenean consectetur, tellus in gravida tempor, dui lacus placerat dui, quis dictum libero sapien at diam. Donec eleifend, turpis ac vulputate vulputate, nulla enim vestibulum magna, nec finibus ex urna sed quam. Curabitur vitae felis mi. Suspendisse potenti.
Quisque scelerisque mattis venenatis. Phasellus in varius lectus. Ut ut lorem eu augue convallis vulputate. Ut at tortor leo. Etiam tristique, quam et ultrices commodo, risus mauris mollis nisi, quis condimentum sapien tortor et dolor. Pellentesque sollicitudin velit ut sapien tristique, in mattis est facilisis. Pellentesque et leo massa. Sed pretium faucibus purus ac sodales. Sed varius eros felis, vel posuere metus lobortis id. Maecenas eget cursus ligula. In nec luctus orci. Nunc sed massa elit. Pellentesque iaculis tortor sit amet tellus ultrices, nec tristique lorem semper.
Donec aliquet ipsum ipsum, in consequat nisl euismod nec. Aenean aliquam nisl nec elit convallis pulvinar. Suspendisse ac malesuada ex. Fusce laoreet metus at nulla suscipit, non facilisis dui scelerisque. Maecenas blandit augue et lorem venenatis consequat. In porttitor eros ac elit placerat sodales. Suspendisse facilisis lorem vestibulum ante commodo dignissim. Mauris dignissim egestas massa, sit amet hendrerit orci molestie id. Suspendisse vel enim sit amet massa eleifend accumsan. Curabitur eleifend velit non nisi egestas ornare. Ut congue, eros a condimentum faucibus, risus sapien cursus elit, tempor condimentum nisi nisi vitae leo. Sed quis blandit tellus, in aliquet purus. Pellentesque eget leo lobortis, consectetur nisi non, facilisis lectus. Morbi tortor augue, posuere vel ultrices in, vestibulum vel nibh. Morbi accumsan tellus congue commodo tincidunt.
Curabitur vitae fermentum eros. Sed ex dolor, suscipit in ornare in, sollicitudin ac mi. Phasellus ornare ipsum vel elit mollis convallis. Nunc nec porttitor tellus. Nullam volutpat leo sed dapibus vestibulum. Ut aliquet accumsan nulla, commodo pharetra urna auctor in. In ligula lectus, molestie a libero a, sollicitudin rutrum tellus.
Integer vitae turpis id ligula eleifend laoreet. Morbi molestie libero non interdum pulvinar. Nulla facilisi. Nulla a facilisis velit. Etiam metus felis, fermentum eget massa eu, posuere vestibulum mauris. Donec placerat faucibus sapien, vitae dapibus est dapibus ac. Nam quis elementum eros, a eleifend erat. Sed interdum nisi at rhoncus rutrum. Phasellus vitae arcu a tellus tincidunt mattis.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras suscipit pharetra ante, quis tristique elit tempor at. Mauris nec nisi porttitor, sodales nunc facilisis, tempor ligula. Aenean luctus purus id orci commodo, eu ornare erat molestie. Proin viverra semper est, sit amet hendrerit mi. Phasellus sodales auctor ipsum eu fermentum. Quisque ut convallis turpis. Suspendisse et varius lorem. Quisque ipsum metus, venenatis quis aliquam et, lobortis nec purus. Aenean consectetur, tellus in gravida tempor, dui lacus placerat dui, quis dictum libero sapien at diam. Donec eleifend, turpis ac vulputate vulputate, nulla enim vestibulum magna, nec finibus ex urna sed quam. Curabitur vitae felis mi. Suspendisse potenti.
Quisque scelerisque mattis venenatis. Phasellus in varius lectus. Ut ut lorem eu augue convallis vulputate. Ut at tortor leo. Etiam tristique, quam et ultrices commodo, risus mauris mollis nisi, quis condimentum sapien tortor et dolor. Pellentesque sollicitudin velit ut sapien tristique, in mattis est facilisis. Pellentesque et leo massa. Sed pretium faucibus purus ac sodales. Sed varius eros felis, vel posuere metus lobortis id. Maecenas eget cursus ligula. In nec luctus orci. Nunc sed massa elit. Pellentesque iaculis tortor sit amet tellus ultrices, nec tristique lorem semper.
Donec aliquet ipsum ipsum, in consequat nisl euismod nec. Aenean aliquam nisl nec elit convallis pulvinar. Suspendisse ac malesuada ex. Fusce laoreet metus at nulla suscipit, non facilisis dui scelerisque. Maecenas blandit augue et lorem venenatis consequat. In porttitor eros ac elit placerat sodales. Suspendisse facilisis lorem vestibulum ante commodo dignissim. Mauris dignissim egestas massa, sit amet hendrerit orci molestie id. Suspendisse vel enim sit amet massa eleifend accumsan. Curabitur eleifend velit non nisi egestas ornare. Ut congue, eros a condimentum faucibus, risus sapien cursus elit, tempor condimentum nisi nisi vitae leo. Sed quis blandit tellus, in aliquet purus. Pellentesque eget leo lobortis, consectetur nisi non, facilisis lectus. Morbi tortor augue, posuere vel ultrices in, vestibulum vel nibh. Morbi accumsan tellus congue commodo tincidunt.
Curabitur vitae fermentum eros. Sed ex dolor, suscipit in ornare in, sollicitudin ac mi. Phasellus ornare ipsum vel elit mollis convallis. Nunc nec porttitor tellus. Nullam volutpat leo sed dapibus vestibulum. Ut aliquet accumsan nulla, commodo pharetra urna auctor in. In ligula lectus, molestie a libero a, sollicitudin rutrum tellus.
Integer vitae turpis id ligula eleifend laoreet. Morbi molestie libero non interdum pulvinar. Nulla facilisi. Nulla a facilisis velit. Etiam metus felis, fermentum eget massa eu, posuere vestibulum mauris. Donec placerat faucibus sapien, vitae dapibus est dapibus ac. Nam quis elementum eros, a eleifend erat. Sed interdum nisi at rhoncus rutrum. Phasellus vitae arcu a tellus tincidunt mattis.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras suscipit pharetra ante, quis tristique elit tempor at. Mauris nec nisi porttitor, sodales nunc facilisis, tempor ligula. Aenean luctus purus id orci commodo, eu ornare erat molestie. Proin viverra semper est, sit amet hendrerit mi. Phasellus sodales auctor ipsum eu fermentum. Quisque ut convallis turpis. Suspendisse et varius lorem. Quisque ipsum metus, venenatis quis aliquam et, lobortis nec purus. Aenean consectetur, tellus in gravida tempor, dui lacus placerat dui, quis dictum libero sapien at diam. Donec eleifend, turpis ac vulputate vulputate, nulla enim vestibulum magna, nec finibus ex urna sed quam. Curabitur vitae felis mi. Suspendisse potenti.
Quisque scelerisque mattis venenatis. Phasellus in varius lectus. Ut ut lorem eu augue convallis vulputate. Ut at tortor leo. Etiam tristique, quam et ultrices commodo, risus mauris mollis nisi, quis condimentum sapien tortor et dolor. Pellentesque sollicitudin velit ut sapien tristique, in mattis est facilisis. Pellentesque et leo massa. Sed pretium faucibus purus ac sodales. Sed varius eros felis, vel posuere metus lobortis id. Maecenas eget cursus ligula. In nec luctus orci. Nunc sed massa elit. Pellentesque iaculis tortor sit amet tellus ultrices, nec tristique lorem semper.
Donec aliquet ipsum ipsum, in consequat nisl euismod nec. Aenean aliquam nisl nec elit convallis pulvinar. Suspendisse ac malesuada ex. Fusce laoreet metus at nulla suscipit, non facilisis dui scelerisque. Maecenas blandit augue et lorem venenatis consequat. In porttitor eros ac elit placerat sodales. Suspendisse facilisis lorem vestibulum ante commodo dignissim. Mauris dignissim egestas massa, sit amet hendrerit orci molestie id. Suspendisse vel enim sit amet massa eleifend accumsan. Curabitur eleifend velit non nisi egestas ornare. Ut congue, eros a condimentum faucibus, risus sapien cursus elit, tempor condimentum nisi nisi vitae leo. Sed quis blandit tellus, in aliquet purus. Pellentesque eget leo lobortis, consectetur nisi non, facilisis lectus. Morbi tortor augue, posuere vel ultrices in, vestibulum vel nibh. Morbi accumsan tellus congue commodo tincidunt.
Curabitur vitae fermentum eros. Sed ex dolor, suscipit in ornare in, sollicitudin ac mi. Phasellus ornare ipsum vel elit mollis convallis. Nunc nec porttitor tellus. Nullam volutpat leo sed dapibus vestibulum. Ut aliquet accumsan nulla, commodo pharetra urna auctor in. In ligula lectus, molestie a libero a, sollicitudin rutrum tellus.
Integer vitae turpis id ligula eleifend laoreet. Morbi molestie libero non interdum pulvinar. Nulla facilisi. Nulla a facilisis velit. Etiam metus felis, fermentum eget massa eu, posuere vestibulum mauris. Donec placerat faucibus sapien, vitae dapibus est dapibus ac. Nam quis elementum eros, a eleifend erat. Sed interdum nisi at rhoncus rutrum. Phasellus vitae arcu a tellus tincidunt mattis.

Images:
1) Copy and replace the following files in the /images folder
        i.      1icon.png
        ii.     2icon.png
        iii.        3icon.png
        iv.     mobil-app.png
        v.      mobil-app-this.png
        vi.     properties-icon.svgz
        vii.        setupLogo.svgz
        viii.       web-app.png
        ix.     web-app-this.png`;
var convertedvalue = btoa(str);
console.log(convertedvalue);
$("#b64text").html(convertedvalue);
$("input[type=submit]").prop("disabled", false);
function dataURItoBlob(dataURI) {
  // convert base64 to raw binary data held in a string
  // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this
  var byteString = atob(dataURI.split(',')[1]);
  // separate out the mime component
  var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]
  // write the bytes of the string to an ArrayBuffer
  var ab = new ArrayBuffer(byteString.length);
  var ia = new Uint8Array(ab);
  for (var i = 0; i < byteString.length; i++) {
    ia[i] = byteString.charCodeAt(i);
  }
  // write the ArrayBuffer to a blob, and you're done
  var blob = new Blob([ab], {
    type: mimeString
  });
  return blob;
  // Old code
  // var bb = new BlobBuilder();
  // bb.append(ab);
  // return bb.getBlob(mimeString);
}
$("#form").submit(function(e) {
  e.preventDefault();
  formData = new FormData($(this)[0]);
  // pass valid `data URI` to `dataURItoBlob`
  var blob = dataURItoBlob("data:text/plain;base64," + convertedvalue);
  formData.append("yourfile", blob);
  $.ajax({
    url: URL.createObjectURL(formData.get("yourfile")),
    type: "GET",
    // data: formData,
    contentType: false,
    cache: true,
    processData: false,
    success: function(data) {
      console.log(data);
      $("#b64text").html(data);
      //alert("Form has been submitted with file");
    }
  });
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
<form id="form">
  <input type="submit" disabled/>
</form>
<div id="b64text" style="  word-wrap: break-word;">
</div>

jsfiddle https://jsfiddle.net/rccfymrz/17/

最简单的方法是对<form>标记上的表单action字段执行AJAX POST请求。这是普通HTML本身所做的事情,但在我们的示例中,您可以通过编程方式指定数据,在本例中是一个包含多个部分的文件。

举例:

就是这么简单:file类型input接受将在form submit上发送的文件路径,而不是文件本身。

UPD:嗯,目前它有点复杂(文件API),但这只是为了让你访问用户想要给你的数据。

您实际上不需要更改file input来发送文件。

如果您拥有服务器,您总是可以接受来自常规text input字段的base64字符串作为有效文件(作为常规文件字段的替代方案)。

否则,你总是可以使用ajax(与文本或blob)来发送你的form

简单的文件上传,不需要提交表单

<标题> HTML
<input id="inputfileUpload" onchange="fileChanged(this);" type="file" accept="*/*" />
<标题> JAVACRIPT h1> div class="answers">

我有文件字段的Base64值[…]我想知道是否有办法设置它。

不可能有一个隐藏的输入吗?您将base64设置为该字段,因为输入type="hidden"的最大大小与type="file"相同

这样,您就避免了安全原因导致无法加载本地文件,并且仍然允许您发送base64表示。唯一的问题是,我们不知道你是怎么得到这个base64字符串的。它是从请求加载的吗?已经从php中填充?div…

使用jquery:

$('#file_id_here').attr({'value':'file_path_here'})

如果您只想设置哪个文件将作为文件输入字段的值,则不能这样做。但是你可以将字段设置为空白,因为表单验证的原因尝试使用JavaScript:

document.getElementById("your-file-form-field-id").value = "";