我正在使用Happstack,我正在尝试使用Facebook Graph API将照片上传到Facebook。
我可以成功向Facebook发帖子。我可以使用url
,但我尝试使用source
参数执行此操作。
我有PNG数据的ByteString,但我似乎无法将其传递给Facebook。
我正在使用fb Haskell library。
我为此创建的函数是:
performPost :: String -> IO Response
performPost code = do
x <- BS.readFile "test.png"
performFBAction $ do
postToFB (BS.unpack x) code =<< getToken url2 code
return $ toResponse postFB
postToFB :: (MonadResource m, MonadBaseControl IO m) => String -> String -> FB.UserAccessToken -> FB.FacebookT FB.Auth m FB.Id
postToFB dataString code token = FB.postObject "me/photos" [args "message" "Test Post Pls Ignore",
args "source" dataString] token
我收到的错误是:
错误是“StatusCodeException(Status {statusCode = 400,statusMessage =”Bad Request“})[(”Content-Type“,”text / html; charset = utf-8“),(”Date“,”星期四,2015年1月29日05:06:00 GMT“),(”连接“,”关闭“),(”内容长度“,”3121“)](CJ {expose = []})
我做错了什么? Graph API指出source
参数应该是类型表单数据,但到目前为止我还没有尝试将其转换为此类数据。
谢谢!
答案 0 :(得分:0)
请检查照片的内容是否编码正确。需要{/ 1}},如
所述答案 1 :(得分:0)
托比说的是正确的。正确执行此操作的代码是:
postPhoto :: FB.UserAccessToken -> IO Response
postPhoto (FB.UserAccessToken _ b _) = withSocketsDo $ withManager $ \m -> do
fbpost <- parseUrl $ "https://graph.facebook.com/v2.2/me/photos?access_token=" ++ T.unpack b
flip httpLbs m =<<
(formDataBody [partBS "message" "Test Message",
partFileSource "graph" "graph.png"]
fbpost)
return $ toResponse postFB
享受!