从数据库D2L Valence API中的文件上载新闻附件

时间:2013-12-10 21:57:53

标签: desire2learn valence

我在Valence API中上传新闻的文件附件时遇到了一些问题。我正在使用PHP,当我尝试发布帖子请求时,操作永远不会完成。我在命令行上运行它,所以我必须终止程序终止程序。

我的文件数据和详细信息(名称,类型和大小)存储在数据库中,我只使用一个调用来发布所有内容,即JSON格式的新闻和文件附件。我正在使用以下格式的帖子消息(如API文档中所述):

内容类型:multipart / mixed;边界= e9e1c17c958e2a89a192bf5d3f7d1ffd 内容长度:46538

- e9e1c17c958e2a89a192bf5d3f7d1ffd Content-Type:application / json

{“Title”:“Some News”,“Body”:{“Text”:“This< / span>是一个非常< / span>多彩标题< / span>”,“Html”:“此< / span>是一个非常< / span>彩色标题< / span>“},”StartDate“:”2013-11-06T05:00:00.000Z“,”EndDate“:”2013-11-30T05 :00:00.000Z”, “IsGlobal”:假, “|评论”:真 “ShowOnlyInCourseOfferings”:假}

- e9e1c17c958e2a89a192bf5d3f7d1ffd 内容处理:表格数据; NAME = “FC.png”;文件名= “FC.png”

内容类型:image / png

{} --e9e1c17c958e2a89a192bf5d3f7d1ffd -

我猜是因为编码而看不到文件内容。我正在计算此消息中的内容长度: JSON数据的字符串长度+文件大小的字节数

我非常特别的问题是,可以直接从数据库发布文件,或者建议先将文件写入磁盘然后尝试发布。我也很感激,如果有人能指出我在线的例子,那里有一个使用PHP的预先存在的示例代码。

还有一件事。如果我没有包含内容长度的文件大小(以字节为单位),那么除文件附件外,它可以正常工作。它的大小为29个字节,当我点击它时,它会打开并显示数据错误。

任何形式的帮助将不胜感激。感谢。

2 个答案:

答案 0 :(得分:0)

HTTP请求的Content Length必须是整个 HTTP正文的长度(字节数)。这意味着JSON结构的大小,文件流中的字节数,以及所有周围正文部分标题/分隔符和空格的长度。

对上传文件数据来源的数据存储没有特别要求。实质上,您正在Body中形成一个包含多个部分的HTTP请求:第一部分必须是JSON结构(媒体类型application/json);第二部分应该是“文件”的字节,并且该正文部分的媒体类型设置得恰当image/png或其他什么) - 无论是从数据库还是从文件中收集该字节流,都不会真的很重要。

答案 1 :(得分:0)

发现我做错了什么。在使用json_encode之前,需要对文件文档数据进行UTF编码。在json_encode期间数据丢失,因为它不了解特殊字符。代码段:

$fileData = array(
    'FileName' => $attachment->getDocumentFilename(),
    'FileType' => $attachment->getDocumentFileType(),
    'FileSize' => $attachment->getDocumentSizeByte(),
    'FileData' => utf8_encode($attachment->getDocument())
);