9

我目前有一个动态表单数量的 django formset。每个表单都有一个文件字段。

虽然这可行,但我需要一种方法来允许一次选择多个文件。我可以做到这一点,input type='file' multiple='multiple'我可以使用FileReader. 但是如何将这些文件传递给 django formset 而不是form-0-fileform-1-file

我可以想到一种方法 - 替换FileFieldTextField,并将base64编码文件作为文本传递,但我不确定这是否是一个好的解决方案。

4

4 回答 4

1

只需使用多个属性并使用 FILES 来获取所有上传的文件。

base64 编码可能无济于事

于 2014-06-13T05:32:59.760 回答
0

您应该将图像存储为文件,(这里有一些很好的答案)

我已经尝试过以这种方式存储图像,但它有很多问题:

  1. 每次访问该页面时,它都会重新开始加载图像,人们不想每次都加载相同的图像。

  2. 它将使用大量带宽。

  3. 如果您使用免费的网络托管服务,将在几个小时内耗尽您所有的带宽,或者当您存储 50 张图像时,这意味着您的网站将整个月都无法使用,即使是提供无限托管的服务和带宽,强制每月带宽。

于 2014-01-16T21:50:07.977 回答
0

使用multiple='multiple'与表单集或单一表单无关。它将与 django 一起工作。因此,如果您打算使用单个表单而不是表单集,只需放置multiple属性,然后访问 request.FILES 即可获取所有上传的文件。

于 2013-05-28T20:23:01.730 回答
0

我最近遇到了一个问题,我必须实现一个解决方案,在该解决方案中,用户可以上传文档,将其流式传输到服务器,并且无需存储在服务器上,而是将流发布到 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']);

您现在将在服务器上拥有二进制数据。

您应该能够通过file.files[0]在 JavaScript 中循环来使其适用于多个文件。

希望您可以将此应用于您的问题。

于 2014-07-30T08:24:28.323 回答