Угловая кодировка имени файла FormData

0

У меня возникают проблемы с кодированием углового файла для загрузки файлов.

Пример: загрузка файла žžž.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 (файл)):

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 формирует объект данных с неправильным именем файла, а сам файл файл является правильным... любые идеи, почему это так? Как мне это решить?

Редактировать:

Заголовки запросов:

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
  • 0
    Скорее всего, это проблема набора символов.
Теги:

1 ответ

0

Вы должны установить contentType и кодировку в свой запрос ajax.

$.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 должен сделать трюк

  • 0
    Не думайте, что я могу изменить тип содержимого запроса ajax, так как он установлен при отправке запроса. Тип содержимого заголовка запроса: multipart/form-data; boundary=---------------------------9275749615024 . Заголовок ответа: utf8: application/json;charset=UTF-8
  • 0
    Просто скопируйте то, что вы видите в заголовке запроса, и поместите его в contentType: pasteyourcopy, затем добавьте charset = utf-8. Таким образом, для вас это будет "multipart / form-data; border = 9275749615024; charset = UTF-8"
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню