【问题标题】:Angular FormData filename encodingAngular FormData 文件名编码
【发布时间】:2016-11-28 16:39:21
【问题描述】:

我在使用 Angular 文件上传文件名编码时遇到问题。

示例:上传文件žžž.txt。结果:žžž.txt

相关 Html 表单部分:

<form id="fileupload"
action="/filestore/services/process/upload"
method="POST"
enctype="multipart/form-data"
data-ng-app="MyApp"
data-ng-controller="DemoFileUploadController"
data-file-upload="options"


<input type="file" name="files[]" multiple ng-disabled="disabled" file-change="uploadFile($event, files)">

文件控制器:

$scope.uploadFile = function($event, files) {
    var file = files[0];
    var data = new FormData();
    console.log(file);
    console.log(data);
    data.append('file-0', file);
    $.ajax({
        url: uploadUrl,
        data: data,
        cache: false,
        contentType: false,
        processData: false,
        type: 'post',
        success: function(data) {
            $scope.reload();
        }
    });
};

文件对象(由 console.log(file) 打印):

lastModified 1467975647307
lastModifiedDate Date {Fri Jul 08 2016 14:00:47 GMT+0300 (FLE Standard Time)}
name "žžž.txt"
size 7
type "text/plain"

发布请求数据正文:

Source
-----------------------------2159279631001
Content-Disposition: form-data; name="file-0"; filename="žžž.txt"
Content-Type: text/plain


-----------------------------2159279631001--

从数据/代码中可以看出,FormData 正在形成文件名不正确的数据对象,而 File 对象本身是正确的......有什么想法吗?我该如何解决这个问题?

编辑:

请求标头:

Content-Type multipart/form-data; boundary=---------------------------9275749615024
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0
X-Requested-Wit XMLHttpRequest

响应标头:

Content-Length 337
Content-Type application/json;charset=UTF-8
Server Apache-Coyote/1.1

【问题讨论】:

标签: angularjs


【解决方案1】:

您应该在您的 ajax 请求中设置 contentType 和编码。

$.ajax({
        url: uploadUrl,
        data: data,
        cache: false,
        contentType: "application/x-www-form-urlencoded;charset=UTF-8",
        processData: false,
        type: 'post',
        success: function(data) {
            $scope.reload();
        }
    });

请注意,您应该更改字符集 对于您正在使用的特定字符集,其中包含 ž

另外,如果您使用的是后端。确保它也使用正确的字符编码

UTF-8 应该可以解决问题

【讨论】:

  • 不要认为我可以更改 ajax 请求内容类型,因为它是在发送请求时设置的。请求头内容类型:multipart/form-data; boundary=---------------------------9275749615024。响应头为 utf8:application/json;charset=UTF-8
  • 只需复制您在请求标头中看到的内容并将其放入 contentType: pasteyourcopy 然后添加 charset=utf-8 所以对您来说它将是“multipart/form-data;boundary=9275749615024;charset=UTF -8"
  • 我不确定这样硬编码标头类型是否正确,因为边界在变化,每个请求都不会保持不变。
  • 我并不是说您必须对其进行硬编码。您还可以动态检查特定文件需要哪个标头。但我相信这应该可以解决您遇到的问题
  • 您建议我如何检查需要哪个标头?
猜你喜欢
  • 2019-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-25
  • 2022-11-28
  • 2017-11-25
  • 1970-01-01
相关资源
最近更新 更多