【问题标题】:Corda attachment uploadCorda 附件上传
【发布时间】:2018-06-28 16:37:14
【问题描述】:

我正在尝试在我的 Corda 应用程序中添加上传附件,但它无法正常工作,因为我在启动时遇到了错误。

[[FATAL] 未找到公共类型参数的注入源 javax.ws.rs.core.Response com.test.agreementnegotiation.api.AgreementNegotiationApi.uploadFile(java.lang.String,java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition) 在索引 0.;来源='资源方法{httpMethod=POST, 消费类型=[多部分/表单数据],生产类型=[], 暂停 = 假,暂停超时 = 0,暂停时间单位 = MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class com.test.agreementnegotiation.api.AgreementNegotiationApi, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@14ab26a]}, definitionMethod=public javax.ws.rs.core.Response com.test.agreementnegotiation.api.AgreementNegotiationApi.uploadFile(java.lang.String,java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition), 参数=[参数[type=class java.lang.String, source=tags, defaultValue=], 参数 [type=class java.io.InputStream, source=file, defaultValue=null], 参数 [type=class org.glassfish.jersey.media.multipart.FormDataContentDisposition, 源=文件,默认值=空]],响应类型=类 javax.ws.rs.core.Response}, nameBindings=[]}']

下面是代码-

@Path("upload")
    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response uploadFile(@DefaultValue("") @FormDataParam("tags") String tags,
                               @FormDataParam("file") InputStream file,
                               @FormDataParam("file") FormDataContentDisposition fileDisposition) {

        String fileName = fileDisposition.getFileName();
        saveFile(file, fileName);
        String fileDetails = "File saved at " + UPLOAD_FOLDER + " " + fileName + " with tags "+ tags;
        System.out.println(fileDetails);
        return Response.ok(fileDetails).build(); 
    }

    private void saveFile(InputStream file, String name) {
        try {
            /* Change directory path */
            java.nio.file.Path path = FileSystems.getDefault().getPath(UPLOAD_FOLDER + name);
            /* Save InputStream as file */
            Files.copy(file, path);
        } catch (IOException ie) {
            ie.printStackTrace();
        }
    }

我搜索错误,发现我们需要启用/resgiter MultiPartFeature。

https://www.google.co.uk/search?q=No+injection+source+found+for+a+parameter+site:stackoverflow.com&sa=X&ved=0ahUKEwjn5ePy5PbbAhWMOxQKHQHXAUkQrQIIUCgEMAI&biw=1280&bih=958

我发现他们谈论更改 web.xml 或添加 AppCong 的任何链接,我不确定如何在 Corda 示例项目中完成。

Corda 团队请帮忙。

【问题讨论】:

    标签: java jersey corda


    【解决方案1】:

    内置节点网络服务器有一个默认端点用于上传附件,/upload/*。此端点开箱即用,无需添加到您的 API 中。您可以通过使用编码类型 multipart/form-data 向此端点发出 POST 请求来上传附件。

    例如:

    <form action="/upload/attachment" method="post" enctype="multipart/form-data">
        <div class="form-group">
            <input type="file" name="jar" class="form-control">
        </div>
        <br>
        <button type="submit" class="btn btn-default">Upload blacklist</button>
    </form>
    

    您不能提供自己的附加端点来上传附件。

    如果您编写自己的节点网络服务器(例如 Spring webserver),则没有限制。

    【讨论】:

    • 嗨乔尔,感谢您的 HTML 代码,但实际上我更多的是寻找 javaside 代码。我的实现基于 github 上的 Corda 模板。我使用的 Templete API 没有任何上传/附件端点 [链接] (github.com/corda/cordapp-template-java/blob/release-V3/cordapp/…)。请分享参考链接,以便我在上传到服务器之前添加自定义代码。
    • 端点默认可用。你不需要添加它。
    • 再次感谢乔尔....我尝试了端点并且它工作了:-) 并给了我 hashId 但它提出了两个问题 - 1)这个文件在哪里上传(如果我想要将其存储在某个特定位置。2)如何将此附件添加到事务中,以便其他节点可以使用它。
    • 太棒了!你能把这些作为单独的问题提出来吗?
    【解决方案2】:

    已弃用的网络服务器 /upload/attachment 的端点在 corda V4 中不再工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多