gpt4 book ai didi

ajax - 使用 AJAX + 多部分表单数据 + UTF-8 编码发送文件和文本

转载 作者:行者123 更新时间:2023-12-04 18:07:59 27 4
gpt4 key购买 nike

我一整天都在尝试让客户端在 FormData() 对象中使用 UTF-8 编码发送 AJAX 请求。我在服务器端使用 Sping MVC,但这不适用于这种情况,因为:

  • 我可以向服务器发送非多部分请求,我可以捕获请求并查看:
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8

    我还可以看到编码为 OK 的字符(á、é、í、ó、ú)。
  • 如果我使用 AJAX + 文件上传 + FormData POST,请使用以下代码:
    var data = new FormData();
    data.append('body', jq("#sp_body").val());
    data.append('signature', jq("#sp_signature").val());
    data.append('subject', jq("#sp_subject").val());
    data.append('email', jq("#sp_email").val());
    data.append("file", jq("#sp_file")[0].files[0]);
    jq.ajax({
    url: contextPath + "/jobs/" + job + "/sendmail",
    data: data,
    cache: false,
    dataType: 'text',
    processData: false,
    contentType: false,
    mimeType: "multipart/form-data",
    type: 'POST',
    success: function(result){
    data = jq.parseJSON(result);
    if (data["statusCode"] == "success") {
    jq("#save_status").html("Email sent!").show().delay(5000).fadeOut(200);
    } else {
    jq("#save_status").html(data["errors"]).show().delay(5000).fadeOut(200);
    }
    },
    error: function (xhr, ajaxOptions, thrownError) {
    alert(xhr.status);
    alert(thrownError);
    }
    });

    然后我捕获请求,我看到:
    Content-Type: multipart/form-data; boundary=---------------------------279972256522979

    但是头部没有UTF-8,非拉丁字符乱码。

  • 问题是,如何使用 FormData 进行 POST(因为我想同时 POST 字符串和文件),并设置 UTF-8 编码?

    我已阅读 UTF-8 text is garbled when form is posted as multipart/form-data但这对我没有帮助。

    最佳答案

    在您的 servlet 中,您必须再次设置编码:

    public void extractRequest(HttpServletRequest request) throws Exception {
    if (request != null) {
    boolean isMultipart = ServletFileUpload.isMultipartContent(request);
    if (isMultipart) {
    FileItemFactory factory = new DiskFileItemFactory();
    ServletFileUpload upload = new ServletFileUpload(factory);
    List<FileItem> items = null;
    try {
    items = upload.parseRequest(request);
    }
    catch (FileUploadException e) {
    e.printStackTrace();
    }
    while (itr.hasNext()) {
    FileItem item = itr.next();
    if (item.isFormField()) {
    String name = item.getFieldName();
    String value = item.getString("UTF-8");
    ...
    ...

    在你的 html 中:
    <form id="formid" action="<yourpath>" enctype="multipart/form-data" 
    method="POST" accept-charset="utf-8">

    当然,如果你使用的是数据库,同样的事情也必须在那里设置

    如果这有帮助,请告诉我;否则我们可以看看其他领域。

    关于ajax - 使用 AJAX + 多部分表单数据 + UTF-8 编码发送文件和文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22025999/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com