【问题标题】:Facebook Graph API how to upload image in node.js?Facebook Graph API如何在node.js中上传图片?
【发布时间】:2021-07-08 02:27:00
【问题描述】:

我正在尝试遵循本指南:

https://developers.facebook.com/docs/graph-api/resumable-upload-api

在研究了如何附加多部分/表单数据后,按照指南中的建议,我想出了以下代码:

    const FB = require("fb")
    const fs = Npm.require("fs")

    FB.setAccessToken(accesstoken)

    const post = async () => {
        let res = await FB.api("app/uploads", "post", {
            file_type: "image/jpeg",
            file_length: file_length,
        })
        if (!res || res.error) {
            console.log(!res ? "error occurred" : res.error)
            return
        }
        const http = require("http")
        const FormData = require("form-data")

        const form = new FormData()
        const readStream = fs.createReadStream(imagepath)
        form.append("file", readStream)

        const req = http.request({
            host: "graph.facebook.com",
            headers: {
                Authorization:
                    "OAuth accesstoken",
                file_offset: 0,
                Connection: "close",
                ...form.getHeaders(),
            },
            method: "POST",
            path: "/" + res.id,
        })

        form.pipe(req, { end: true })

        req.on("response", function (res) {
            console.log(res)
        })

        return res
    }

我想获取上传的文件句柄,但我在响应中得到的只是一个巨大的对象,它的开头是这样的(状态代码为 200):

IncomingMessage {
  _readableState: ReadableState {
    objectMode: false,
    highWaterMark: 16384,
    buffer: BufferList { head: null, tail: null, length: 0 },
    length: 0,
    pipes: null,
    pipesCount: 0,
    flowing: null, ...

我做错了什么?可能是我附加文件的方式。指南没有说明给它起什么名字,所以我只是把它命名为“文件”。

非常感谢任何帮助。

【问题讨论】:

    标签: node.js image facebook-graph-api upload


    【解决方案1】:

    我想通了,虽然它可能不是最佳的:

        const FB = require("fb")
        const fs = Npm.require("fs")
    
        FB.setAccessToken(accessToken)
    
        let post = async () => {
            let res = await FB.api("app/uploads", "post", {
                file_type: "image/jpeg",
                file_length: file_length,
            })
            if (!res || res.error) {
                console.log(!res ? "error occurred" : res.error)
                return
            }
            
            const request = require("request")
    
            request.post({
                url: "http://graph.facebook.com/" + res.id,
                formData: {
                    source: {
                        value: fs.createReadStream(imagePath),
                        options: {
                            filename: filename,
                            contentType: "image/jpeg",
                        },
                    },
                },
                headers: {
                    Authorization:
                        "OAuth AccessToken",
                    file_offset: 0,
                    Connection: "close",
                    'content-type' : 'multipart/form-data'
                }
            },
            function (err, resp, body) {
                if (err) {
                    console.log("Error!")
                } else {
                    console.log("URL: " + body)
                }
            })
    
            return res
        }
    
        return post()
    

    【讨论】:

      猜你喜欢
      • 2013-04-19
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多