You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Liferay 6.2.4 GA5调用JSON API上传文件报错:无对应Web服务动作

解决Liferay 6.2.4 GA5 JSON API上传文档的路径错误问题

首先咱们拆解你遇到的问题:No JSON web service action associated with path /dlapp/add-file-entry这个错误,核心原因是你用错了Liferay 6.2版本对应的JSON API路径,再加上代码里还有几个小细节问题,导致上传失败。下面一步步帮你修复:

问题根源分析

  1. API路径错误:Liferay 6.2.4中,负责添加文件条目的JSON Web Service并不在/dlapp/路径下,正确的路径是/dlfileentry/add-file-entry(对应后台的DLFileEntryService.addFileEntry方法)。
  2. 表单对象选择错误:你代码里的$(this)[0]指向的是点击的按钮,不是表单本身,这会导致FormData无法正确读取文件和表单数据。
  3. 缺少CSRF验证:Liferay 6.2默认开启了CSRF保护,POST请求必须携带有效的authToken才能通过权限校验。
  4. 参数传递不规范:把非文件参数直接拼在URL里,容易出现参数解析异常,建议统一放到FormData中传递。

修复后的完整代码

<html>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script>
$( document ).ready(function() {
    $("#submit").click(function(e) {
        e.preventDefault();
        
        // 从Liferay的全局变量获取CSRF Token
        var authToken = Liferay.authToken;
        
        // 正确获取表单对象来构建FormData
        var formData = new FormData($("#uploadForm")[0]);
        
        // 把所有必要参数添加到FormData中
        formData.append('repositoryId', '27058');
        formData.append('folderId', '34530');
        formData.append('sourceFileName', 'Screenshot');
        formData.append('mimeType', 'image/png');
        formData.append('title', 'hello');
        formData.append('description', 'test');
        formData.append('changeLog', 'not');
        // 加入CSRF Token
        formData.append('authToken', authToken);
        
        $.ajax({
            url: 'http://localhost:8080/api/jsonws/dlfileentry/add-file-entry',
            type: 'POST',
            data: formData,
            async: false,
            cache: false,
            contentType: false,
            enctype: 'multipart/form-data',
            processData: false,
            success: function (response) {
                alert('文件上传成功!');
                console.log(response);
            },
            error: function(xhr, status, error) {
                alert('上传失败:' + error);
                console.log(xhr.responseText);
            }
        });
    });
});
</script>
<!-- 给表单添加ID,方便正确获取 -->
<form id="uploadForm">
    <input type="file" name="file"/>
    <input type="button" value="submit" id="submit"/>
</form>
</html>

额外注意事项

  • 权限验证:确保当前登录用户拥有目标文件夹的「添加文档」权限,否则会返回权限错误。
  • ID正确性:确认repositoryId和folderId是正确的,你可以在Liferay控制面板的文档库中,通过查看文件夹的URL来获取这些ID。
  • 跨域问题:如果你的页面和Liferay不在同一个域名下,需要在Liferay的portal-ext.properties中配置CORS允许跨域请求,比如添加:
    # 简单配置(适合测试环境)
    jsonws.web.service.public.methods=*
    portal.security.csrf.enabled=false
    
    # 更安全的生产环境配置示例
    cors.enabled=true
    cors.allowed.origins=http://your-frontend-domain.com
    cors.allowed.methods=GET,POST,PUT,DELETE
    

内容的提问来源于stack exchange,提问作者Jiten Shahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:27:53