Загрузка файла через XMLHttpRequest и другая кодировка для умлаутов - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть функция JS для асинхронной загрузки файлов:

	function uploadFile(file)
	{
		var xhr = new XMLHttpRequest();    
		xhr.upload.addEventListener("progress", handleProgress);
		xhr.addEventListener("load", handleComplete);
		xhr.addEventListener("error", handleError);
		xhr.open("POST", options.url + "?" + [options.queryFields].join("&"));    

		var formdata = new FormData();    
		formdata.append(options.uploadCallback, file);  

		xhr.send(formdata);
		}	

И, кажется, работает просто отлично. Пока я не загружаю файл, имя которого включает немецкие умлауты.

Запрос XHR (или, скорее всего, мой код) кодирует Umlauts по-разному в разных операционных системах:

  • На Mac с Firefox 61 буква «ü» кодируется как 117, 204, 136, что означает «u» и символ UTF-8 «Комбинированная диараезия».

  • В Windows 7 x64 и Firefox 61 он закодирован правильно: 195, 188

Я загружаю один и тот же файл с обеих машин. Я проверил различия в сетевой консоли Firefox и на стороне сервера. Струны отличаются от двух браузеров / машин.

Что мне делать, если я хочу, чтобы обе платформы / браузеры правильно отправляли имя файла в сообщении Multipart?

Я знаю, что есть возможность передать другое имя файла в качестве третьего параметра в formdata.append (), но ни encodeURI, ни encodeURICOmponent не являются правильным способом сделать имя файла с Umlauts "транспортабельным"

...