【问题标题】:Sending a File and a String through Ajax FormData()通过 Ajax FormData() 发送文件和字符串
【发布时间】:2019-08-20 15:17:50
【问题描述】:

我正在尝试使用 Ajax 中的 FormData() 函数将文件和字符串上传到 MongoDB。我知道 Ajax 倾向于对所有传递的数据进行字符串化,除非我们设置 processData: false,因此我必须对文件和字符串都使用 FormData。

HTML 片段

<h5 class="modal-title h5Modal" id="htmlIP"></h5>
<div class="form-group">
<label for="fileUpload">Choose a File To Upload:</label>
<input type="file" id="fileUpload" accept="image/*,.pdf,.pptx" class="file-path">
</div>
<div class="modal-footer">
<button class="btn btn-primary submitFile" data dismiss="modal" > Submit </button>
</div>

Python

def FileSubmit(request):
    if request.method == "GET":
       ip = request.GET['IP']
       file = request.GET['fileUpload']

    else:
       ip = ''

    res = Pc.uploadToDB(ip, file)


    data = {
         'version' : res,
    }

    return JsonResponse(data)        

uploadToDB 函数在 MongoDB 中查找具有提供的 ip 的文档并更新文件字段。

这是我的 Ajax 函数:

$(document).ready(function() {
    $('.submitFile').on('click,function(){
        var rowID = $('#htmlIP').text();

        formdata = new FormData();
        var file = document.getElementById('fileUpload').files[0];
        formdata.append('file', file);


        $.ajax({
            type: "GET",
            url: 'FileSubmit/' + rowID,
            //data: {
            //    'IP': rowID,
            //    'fileUpload': file,
            //},
            data: formdata,
            processData: false,
            contentType: false,
            success: function(data){
                alert(data.version);
                window.location.reload();
            },
            error: function(err){
                alert(err);
             }
         });

    });
});

如您所见,我已经注释掉了我使用数据的第一种方法。

当我尝试使用这些函数上传文件时,我收到以下错误:

Not Found: Path/to/FileSubmit/XXX.XXX.XXX.XXX

这是可以理解的,因为我不应该提供 rowID 作为 url。但这是我能够正确获取文件和 ip 的最接近的方法。

每当我删除 url 中的 rowID 并尝试不同的解决方案时,我都会收到相同的以下错误,该错误指向用 Python 编写的 request.GET 行:

MultiValueDictKeyError: "u'IP'"

这意味着它无法正确读取 IP。

我查看了Send FormData and String Data Together Through JQuery AJAX? 中提供的大部分答案 然而,不幸的是,它们中的大多数并没有帮助我,因为它们专注于上传一组字符串而不是一个实例。

有没有办法将字符串附加到 formdata 或我不知道的其他方法?非常感谢任何帮助或建议。

【问题讨论】:

  • 有件事让我大吃一惊:您正试图使用​​GET 请求而不是POST 来发送文件。
  • 感谢您的回复 .. 您能否看到我对 Saremi 先生的回复,并检查您是否知道此问题的根本原因?

标签: python jquery html ajax mongodb


【解决方案1】:

我认为问题在于您的 AJAX 请求类型。您应该发送POST 发送文件的请求。

$.ajax({
    type: "POST",
    ...
});

【讨论】:

  • 感谢您的建议。所以我已经为 POST 方法更改了我的 Python 和 Ajax 代码。但是,我在 MongoDB 中的文件字段值得到了 null .. 我做了一些调试,似乎 request.POST.get('fileUpload') 在从 HTML 代码接收到 null 后立即返回 null。对此有什么建议吗? @user7290573
猜你喜欢
  • 1970-01-01
  • 2021-01-04
  • 1970-01-01
  • 2015-08-04
  • 2014-01-30
  • 1970-01-01
  • 2016-09-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多