我正在从事一个与Facebook用户集成的反应性项目。我需要张贴一个客户端生成的图像到一个私人团体代表登录用户。使用{group-id}/photo端点,我可以成功地发布web上已经存在的图片,提供url和caption参数:
const postImageUrlToFacebook = () => {
    const url = "https://upload.wikimedia.org/wikipedia/commons/e/e0/New.gif";
    let caption = "test upload url image from React";
    httpFacebookGraphClient(facebookToken)
      .post("/" + ldlTestFacebookGroupId + "/photos", { url, caption })
      .then((res) => {
        console.log(res.data);
      })
      .catch((err) => {
        console.log(err);
      });
  };httpFacebookGraphClient的定义如下:
import axios, { AxiosRequestConfig } from "axios";
const httpFacebookGraphClient = (token: string | null) => {
  const defaultOptions = {
    baseURL: "https://graph.facebook.com/v14.0",
    method: "get",
    // withCredentials: true,
    headers: {
      "Content-Type": "application/json",
    },
  };
  // Create instance
  let instance = axios.create(defaultOptions);
  // Set the access token parameter for any request
  instance.interceptors.request.use((config: AxiosRequestConfig): AxiosRequestConfig => {
    if (!config) {
      config = {};
    }
    if (!config.params) {
      config.params = {};
    }
    config.params.access_token = token;
    config.params.limit = "999";
    return config;
  });
  return instance;
};
export default httpFacebookGraphClient;现在我需要从默认的svg开始,通过javascript修改其中的一些g标记,转换为jpg并将其发布到facebook组。让我们假设启动的SVG如下:
<svg id="Livello_1" data-name="Livello 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 150 107"><defs><style>.cls-1,.cls-3,.cls-4,.cls-5{fill:#ffc000;}.cls-2{fill:#fff;}.cls-3,.cls-4,.cls-5{stroke:#fff;stroke-miterlimit:10;}.cls-3{stroke-width:0.87px;}.cls-4{stroke-width:0.79px;}.cls-5{stroke-width:0.65px;}</style></defs><title>bannerino scegli il tuo sconto</title><path class="cls-1" d="M136.88,2.63a10,10,0,0,1,10,10V94.37a10,10,0,0,1-10,10H13.13a10,10,0,0,1-10-10V12.63a10,10,0,0,1,10-10H136.88m0-2H13.13a12,12,0,0,0-12,12V94.37a12,12,0,0,0,12,12H136.88a12,12,0,0,0,12-12V12.63a12,12,0,0,0-12-12h0Z"/></svg>我从最后开始,试着在构建图像之前把一个本地图片发布到Facebook群组,但我已经被困住了。在这个链接上阅读Facebook文档,我在url参数上找到了这个句子;
The URL of a photo that is already uploaded to the Internet. You must specify this or a file attachment提到一个文件附件。
在Facebook文档中,我再次找到了解释如何将文件上传到Facebook以便在随后的api调用中使用该文件的这,但我无法使其工作。
有人能给我一个如何进行的提示吗?
发布于 2022-08-23 17:24:25
我找到了解决这个问题的方法,我可以成功地发布由输入字段客户端选择的图像。
反应组分状态:
 const [fileToUpload, setFileToUpload] = useState<any>();inputFileChangeHandler:
  const inputFileChangeHandler = (event: React.ChangeEvent<HTMLInputElement>) => {
    if (event.currentTarget != null && event.currentTarget.files != null) {
      setFileToUpload(event.currentTarget.files[0]);
    }
  };uploadImageToFacebook:
  const uploadImageToFacebook = () => {
    let caption = "test upload local image from React";
    const fileReader = new FileReader();
    fileReader.onloadend = async () => {
      if (fileReader.result != null) {
        const photoData = new Blob([fileReader.result], { type: "image/png" });
        const formData = new FormData();
        formData.append("source", photoData);
        formData.append("caption", caption);
        httpFacebookGraphClient(facebookToken)
          .post("/" + ldlTestFacebookGroupId + "/photos", formData, {
            headers: {
              "Content-Type": "multipart/form-data",
            },
          })
          .then((res) => {
            console.log(res.data);
          })
          .catch((err) => {
            console.log(err);
          });
      }
    };
    fileReader.readAsArrayBuffer(fileToUpload);
  };关于联署材料:
<input type="file" id="file-input" onChange={inputFileChangeHandler} />
<button onClick={uploadImageToFacebook}>Invia</button>https://stackoverflow.com/questions/73449341
复制相似问题