Javascript 使用base64编码文本而不是多部分/表单数据上传文件-好主意?
我目前有一个django表单集,表单数量动态。每个表单都有一个文件字段 虽然这是可行的,但我需要一种允许同时选择多个文件的方法。我可以使用Javascript 使用base64编码文本而不是多部分/表单数据上传文件-好主意?,javascript,html,django,Javascript,Html,Django,我目前有一个django表单集,表单数量动态。每个表单都有一个文件字段 虽然这是可行的,但我需要一种允许同时选择多个文件的方法。我可以使用input type='file'multiple='multiple'来实现这一点,并且我可以使用FileReader读取文件数据。但是如何将这些文件传递给django formset,而不是form-0-file、form-1-file等 我可以想出一种方法——用TextField替换FileField,并将base64编码文件作为文本传递,但我不确定这是
input type='file'multiple='multiple'
来实现这一点,并且我可以使用FileReader
读取文件数据。但是如何将这些文件传递给django formset,而不是form-0-file
、form-1-file
等
我可以想出一种方法——用
TextField
替换FileField
,并将base64
编码文件作为文本传递,但我不确定这是否是一个好的解决方案。使用multiple='multiple'
与表单集或单个表单无关。它将与django在本地协同工作。因此,如果您计划使用单个表单而不是表单集,只需将multiple
属性放入,然后访问request.FILES以获取所有上载的文件。您应该将图像存储为文件
我已经尝试过以这种方式存储图像,但它有很多问题:
只需使用多个属性,并使用文件来获得所有上传的文件
base64编码可能没有帮助我最近遇到了一个问题,我必须实现一个解决方案,用户可以上传文档,将其流式传输到服务器,而无需在服务器上存储,将流式传输到SOAP服务器 我的实施方式如下: 我想通过AJAX上传文件,以便显示上传的进度 这是我的解决方案(请注意,一次只针对一个文件,但这可能是一个起点。) JavaScript: 首先为FormData声明一个对象-这将用于随文件发送任何附加信息:
var formData = new FormData();
其次,附加所有要发送到服务器的数据:
formData.append("documentDescription", $("#documentDescription textarea").val());
formData.append("afile", file.files[0]);
现在创建XMLHttpRequest的新实例:
var xhr = new XMLHttpRequest();
以下是使所有工作正常的代码的其余部分:
xhr.open("POST", "UploadDocumentURL", true);
xhr.upload.onprogress = function(e) {
if (e.lengthComputable) {
var percentComplete = (e.loaded / e.total) * 100;
$('.progress .bar').css('width', percentComplete + '%').attr('aria-valuenow', percentComplete);
}
}
xhr.onload = function() {
if (this.status == 200) {
var resp = JSON.parse(this.response);
if (resp.type === "error") {
notify.add(resp.type, "Error", resp.message, 3000, true);
} else {
notify.add(resp.type, "Success", resp.message, 3000);
}
}
;
};
xhr.send(formData);
PHP
$documentName = $_POST["documentDescription"];
$fileName = $_FILES['afile']['name'];
$fileType = $_FILES['afile']['type'];
$ext = pathinfo($fileName, PATHINFO_EXTENSION);
$fileName = pathinfo($fileName, PATHINFO_FILENAME);
$fileContent = file_get_contents($_FILES['afile']['tmp_name']);
现在,您将在服务器上拥有二进制数据
通过在JavaScript中循环使用file.files[0]
,您应该能够对多个文件执行此操作
希望您能将此应用于您的问题。谢谢,看来这是唯一的好方法。我正在试图找到一种方法使django formset接受这个文件列表。