没有与path / dlapp / add-file-entry和方法POST liferay 6.2.4相关联的JSON Web服务操作

时间:2018-01-06 07:33:45

标签: liferay liferay-6 liferay-ide

这是我通过jsonapi在liferay中上传文档的代码。我正在文件里面添加文件。但它显示错误“没有与path / dlapp / add-file-entry关联的JSON Web服务操作”。我正在使用liferay 6.2.4 ga5。

由于

<html>
    <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>

    <script>
    $( document ).ready(function() {
        $("#submit").click(function(e) {
            e.preventDefault();
            var formData = new FormData($(this)[0]);
            $.ajax({
                url: 'http://localhost:8080/api/jsonws/dlapp/add-file-entry?repositoryId=27058&folderId=34530&sourceFileName=Screenshot&mimeType=image/png&title=hello&description=test&changeLog=not',
                type: 'POST',
                data: formData,
                async: false,
                cache: false,
                contentType: false,
                enctype: 'multipart/form-data',
                processData: false,
                success: function (response) {
                    alert(response);
                }
          });
     });
 });
</script>
<form>
    <input type="file" name="file"/>
    <input type="button" value="submit" id="submit"/>
</form>
</html>

1 个答案:

答案 0 :(得分:1)

Liferay JIRA

您可能遇到LPS-31943。这是与此资源操作相关的已知问题。请使用修补工具升级到最新的修补程序版本。我在评论中看到用户声称这个问题仍然存在,尽管在某些版本的Chrome中关闭了错误。

错误消息

当您从请求中缺少必需的数据时,最常见到此错误消息。假设您已完全修补,很可能您的数据对象不正确。即使您将数据作为查询参数发送(这可能是一个问题,具体取决于您的JSON WS属性),数据对象仍然是错误的,因此会给您错误消息。

HTTP请求

首先,您是否有这样一种特殊原因来调用服务?我相信只使用HTML

就可以获得更好的结果
<form action="http://localhost:8080/api/jsonws/dlapp/add-file-entry" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="repositoryId" value="27058"/>
    <input type="hidden" name="folderId" value="34530"/>
    <input type="hidden" name="title" value="hello"/>
    <input type="hidden" name="description" value="test"/>
    <input type="hidden" name="changeLog" value="not"/>
    <input type="file" name="file"/>
    <input type="submit" value="addFileEntry(file)">Submit</input>
</form> 

此代码取自official Liferay knowledge base,并根据您的具体示例进行调整。如果您坚持使用jQuery,则需要对数据对象进行字符串化。我会做这样的事情。

<html>
<head></head>
<body>
    <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>

    <script>
    $( document ).ready(function() {
        $("#submit").click(function(e) {
            e.preventDefault();
            var formData = JSON.stringify($("form:first").serializeArray());
            $.ajax({
                url: 'http://localhost:8080/api/jsonws/dlapp/add-file-entry',
                type: 'POST',
                data: formData,
                async: false,
                cache: false,
                contentType: false,
                enctype: 'multipart/form-data',
                processData: false,
                success: function (response) {
                    alert(response);
                }
          });
     });
 });
</script>
<form>
        <input type="hidden" name="repositoryId" value="27058"/>
        <input type="hidden" name="folderId" value="34530"/>
        <input type="hidden" name="title" value="hello"/>
        <input type="hidden" name="description" value="test"/>
        <input type="hidden" name="changeLog" value="not"/>
        <input type="file" name="file"/>
        <input type="button" value="submit" id="submit"/>
</form>
</body>
</html>

最佳实践

如果从外部应用程序调用此服务,则上面的示例很好。但是,如果您从门户网站(例如JavaScript portlet)中调用它,我肯定会使用Liferay的JavaScript API和AlloyUI标记库。

Liferay.Service(
  '/dlapp/add-file-entry',
  {
    repositoryId: 12345,
    folderId: 2345,
    sourceFileName: 'Screenshoot',
    mimeType: '',
    title: '',
    description: '',
    changeLog: '',
    cmd: {"/dlapp/add-file-entry":{}},
    file: null
  },
  function(obj) {
    console.log(obj);
  }
);

此外,如果您正在构建新的东西,您将使用Liferay 7或DXP,因为它更新。