2

FB API を使用して Facebook に動画ファイルをアップロードするにはどうすればよいですか? 私はstackoverflowを見回しましたが、ビデオ/写真がすでにどこかでオンラインになっている場合にのみ答えを見つけることができますが、ユーザーがアプリケーションを介してFacebookにファイルを直接アップロードできるようにしたいと考えています.

Facebook にアップロードできるソリューションの 1 つはhttps://stackoverflow.com/a/8195849/364938ですが、オンラインのどこかに写真があることを前提としています。

これは可能ですか?もしそうなら、どのように?

4

1 に答える 1

0

これは、クライアント側から JavaScript を使用して動画をアップロードするための私のコードです。http 要求には axios を使用しましたが、独自のものを使用することもできます。


function uploadVideo(adaccount, access_token, file) {
  return axios({
    method: 'POST',
    url: `${adaccount}/advideos`,
    params: {
      access_token,
      upload_phase: 'start',
      file_size: file.size
    }
  })
    .then(res => {
      return new Promise(resolve => {
        resolve(transferVideo(
          adaccount,
          access_token,
          res.data.upload_session_id,
          res.data.start_offset,
          res.data.end_offset,
          file,
          1
        ))
      })
    })
    .catch(err => {
      // Note: you can handle your error here
      console.log(err)
    })
}

function transferVideo(adaccount, token, sessionId, start, end, file, number) {
  if (start === end) {
    return new Promise(resolve => {
      resolve(postVideo(adaccount, token, sessionId, file.name))
    })
  }
  const blob = new Blob([file], {
    type: file.type
  })
  const chunk = blob.slice(start, end, file.type)
  const formData = new FormData()
  formData.append(
    'video_file_chunk',
    chunk,
    `@chunk${number}.${file.type.split('/')[1]}`
  )
  return new Promise(resolve => {
    resolve(uploadVideoChunk(
      adaccount,
      token,
      start,
      sessionId,
      formData
    ))
  })
    .then(res => {
      return new Promise(resolve => {
        resolve(transferVideo(
          adaccount,
          token,
          sessionId,
          res.start_offset,
          res.end_offset,
          file,
          number++
        ))
      })
    })
    .catch(err => {
      throw new Error(JSON.stringify(err))
    })
}

function uploadVideoChunk(adaccount, access_token, start_offset, upload_session_id, formData) {
  return axios.post(`${adaccount}/advideos`, formData, {
    headers: {
      'content-type': 'multipart/form-data'
    },
    params: {
      access_token,
      upload_phase: 'transfer',
      start_offset,
      upload_session_id
    }
  })
    .then(res => res.data)
    .catch(err => {
      throw new Error(JSON.stringify(err))
    })
}

function postVideo(adaccount, access_token, upload_session_id, title) {
  return axios({
    method: 'POST',
    url: `${adaccount}/advideos`,
    params: {
      access_token,
      upload_phase: 'finish',
      upload_session_id,
      title
    }
  })
    .then(res => res.data)
    .catch(err => {
      throw new Error(JSON.stringify(err))
    })
}
于 2018-12-16T19:48:00.973 に答える