0

我正在使用 django 和 cloudinary 直接上传来上传 iamges,如果表格有效,它就可以工作。

但如果我的表单无效,我的页面会重新加载,然后表单会要求用户再次上传图片。

有什么办法可以解决这个问题?


我的代码附在下面。因为我使用直接上传,所以在上传图片后。它将立即显示在前端。但是当表单无效并刷新表单时,图像就消失了。(在您最近更新之后,确实我不需要再次重新上传照片。但是照片不见了。如何再次显示?)

谢谢。

    <script>
        $('.cloudinary-fileupload').bind('cloudinarydone', function(e, data) {
            var imag_var = $.cloudinary.image(data.result.public_id, {
                format : data.result.format,
                version : data.result.version,
                transformation : 'form_preview'
            });
            $('.preview').html(imag_var);
            $('.status_value').text('Uploaded:' + data.result.public_id);
            $('#id_cover_image').val(data.result.public_id);
            return true;
        });
        $('.cloudinary-fileupload').bind('fileuploadprogress', function(e, data) {
            $('.progress').attr({
                style : "visibility:show",
            });
            $('.status_value').text('Uploading...');
        });
    </script>
4

1 回答 1

1

Cloudinary javascript 插件将预加载的资源 URI 放在隐藏字段中。见这里

从上面可以看出,如果该字段已经存在,则 javascript 插件将填充它。否则,它将创建它。

为了在无效的表单提交中保留该 URI,您应该创建一个隐藏字段,该字段根据您为 cloudinary_direct_upload_field 指定的字段名称命名,并填充来自失败提交的值。

解决此问题的另一种方法是使用 AJAX 调用提交表单。这样,即使验证失败并且可以重新提交,页面上的数据也会保留。有关如何完成此操作的示例,请参见此处。

编辑:

Cloudinary Python 客户端库的 1.0.12 版现在在需要时添加了隐藏字段,因此重新提交应该可以工作。请参阅更改日志

编辑2:

为了在表单验证错误的情况下重新生成预览图像,您可以在页面加载时运行的 javascript 代码中添加类似这样的内容(假设表单中的字段名称是“image”):

//If form validation failed have the posted preloaded URI from the earlier
//submission so we can show preview
//pull the value from the hidden field
var imageUri = $('#direct_upload input[name="image"]').val();
//preloaded image URI structure
//{resource_type}/{type}/v{version}/{filename}#{signature}
var regex = /^([^\/]+)\/([^\/]+)\/v(\d+)\/([^#]+)#([^\/]+)$/;
//if there is value and it matches the pattern:
if (imageUri && regex.test(imageUri)) {
  var uriParts = regex.exec(imageUri);
  var version = uriParts[3];
  var filename = uriParts[4];
  //reconstruct a viable source
  var src = "v" + version + "/" + filename;
  //generate a cloudinary image tag and add it to the 'preview' div
  $(".preview").append(
    $.cloudinary.image(src, {
      transformation: "form_preview" //your named transformation
    })
  );
}
于 2013-10-30T07:00:53.680 回答