Contentful Management API загрузить изображение - PullRequest
0 голосов
/ 01 июня 2018

Я использую CMA напрямую (без SDK).Я пытаюсь загрузить файл в Contenful.Из того, что я прочитал, поток выглядит так:

  1. Загрузить файл
  2. Создать ресурс (связать его с недавно загруженным файлом)
  3. Обработать ресурс

Я загружаю файл следующим образом:

const xhr: XMLHttpRequest = new XMLHttpRequest();
xhr.onreadystatechange = () => {
  if (xhr.readyState === 4) {
    if (xhr.status === 200 || xhr.status === 201) {
      let data: any = JSON.parse(xhr.response);
      resolve(JSON.parse(xhr.response));
    } else {
      reject(xhr.response);
    }
  }
};

const url = "https://upload.contentful.com/spaces/" + space_id + "/uploads";
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/octet-stream");
xhr.setRequestHeader("Authorization", "Bearer " + token);
const formData = new FormData();
formData.append("file", file, file.name);
xhr.send(formData);

Затем я создаю актив следующим образом:

const request = {
fields: {
  file: {
    "en-US": {
      contentType: file.type,
      fileName: file.name,
      uploadFrom: {
        sys: {
          type: "Link",
          linkType: "Upload",
          id: uploadId
        }
      }
    }
  }
}

};

 return axios
    .post(
      "https://api.contentful.com/spaces/" + space_id + "/assets",
      JSON.stringify(request),
      config
    )....

и затем обработайте его следующим образом:

 const request = {
fields: {      
 file: {
    "en-US": {
      contentType: "image/png",
      fileName: "Sample_45.png",
      uploadFrom: {
        sys: {
          linkType: "Upload",
          type: "Link",
          id:uploadId
        }
      }
    }
  }
}

};

 return axios
    .put(
      "https://api.contentful.com/spaces/" +
        space_id +
        "/assets/" +
        assetId +
        "/files/en-US/process",
        asset.data.fields,
      config
    )

После этого я могу увидеть актив в Contentful Media, но изображение никогда не загружается и не загружается.размер изображения отображается.Некоторым кажется, что Contenful не распознает файл или неправильно связан с ресурсом;Я понятия не имею.Помогите пожалуйста.

1 Ответ

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

Похоже, что вы используете React.

Создайте форму загрузки:

<input type="file" onChange={this.fileChangedHandler}>
<button onClick={this.uploadHandler}>Upload!</button>

и установите state, fileChangedHandler и uploadHandler:

state = {selectedFile: null}

fileChangedHandler = (event) => {
  this.setState({selectedFile: event.target.files[0]})
}

uploadHandler = () => { 
  axios.post(
    'https://upload.contentful.com/spaces/{space_id}/uploads, 
    this.state.selectedFile, 
    config
  )
}

После завершения загрузки вы можете создать, обработать и опубликовать актив.

...