Разместить вложение в Сервис сейчас - PullRequest
0 голосов
/ 07 июня 2018

Я в затруднительном положении, как заставить это работать.В Почтальон я могу загрузить вложение без каких-либо проблем.Я загружаю простой текстовый файл.Код из postmans показывает это:

var form = new FormData();
form.append("uploadFile", "C:\\temp\\test.txt");

var settings = {
  "async": true,
  "crossDomain": true,
  "url": "https://xxxxxxx.service-now.com/api/now/attachment/file?table_name=problem&table_sys_id=oiui5346jh356kj3h634j6hk&file_name=Toast",
  "method": "POST",
  "headers": {
    "Accept": "application/json",
    "Content-Type": "application/x-www-form-urlencoded",
    "Authorization": "Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx==",
    "Cache-Control": "no-cache",
    "Postman-Token": "39043b7f-8b2c-1dbc-6a52-10abd25e91c1"
  },
  "processData": false,
  "contentType": false,
  "mimeType": "multipart/form-data",
  "data": form
}

$.ajax(settings).done(function (response) {
  console.log(response);
});

Когда я использую это на странице .asp, я получаю сообщение об ошибке 400 и консоль, которая говорит: «Не удалось создать вложение. Часть файла может отсутствоватьв запросе. "Как вы получаете файл, который вы хотите прикрепить в код правильно.Я думал, что трудное кодирование это сработало бы.Как вы получаете код для поиска файла на локальном компьютере пользователя.Как только я получу эту работу, я в конечном итоге хочу иметь кнопку ввода файла, чтобы выбрать файл.

Спасибо, Скотт

1 Ответ

0 голосов
/ 09 июня 2018

Ваш код выглядит хорошо, за исключением этой строки:

form.append("uploadFile", "C:\\temp\\test.txt");

Передача имени файла в качестве второго параметра не будет работать, согласно документации FormData.append здесь , вам нужно передать некоторый объект blob / file, указывающий на сам документ (не на строку)

Теперь есть 2 возможных сценария:

Сценарий 1

Пользователь выбирает файл вручную, используя кнопку обзора

Здесь вам нужно добавить вход на страницу и триггер для загрузки файла, когда он выбран, что-то вроде ниже может быть:

uploadDataFile();

function uploadDataFile(fileInput) {
  // creates the FormData object
  var form = new FormData();
  // get the first file in the file list of the input 
  // (you will need a loop instead if the user will select many files)
  form.append("uploadFile", fileInput.files[0]);
  // ... the rest of your AJAX code here ...
}
<input type="file" onchange="uploadDataFile(this)" />

Сценарий 2

Загрузка файла напрямую без вмешательства пользователя

Здесь необходимо построитьфайловый объект вручную такой же, как в этом ответе , и затем вы добавите его как обычно в ваш объект данных

function uploadDataFile() {
  // creates the file object
  var fileObject = new File (...);
  // creates a data object and appends the file object to it
  var form = new FormData();
  form.append("uploadFile", fileObject);
  // ... the rest of your AJAX code here ...
}

Последнее замечание

Обратите внимание на совместимость браузера для FormData & File объектов

...