使用 java 列出存储在 cloudant 中的所有附件

List all attachments stored in cloudant with java

我正在开发一个演示,但一直坚持下去。 我想在 java 网络应用程序中列出所有附件(例如 PDF),但我无法检索和列出它们。 我只能检索公共数据(字符串、整数)。 有没有标准的方法来检索和显示? 我一直在阅读所有帖子,但似乎没有任何效果。

这里是我添加供应商的地方,附件是:

public void addVendor(final Vendor vendor, final InputStream inputStream, final long size, final String contentType)
    {
        final Database db = getDb();
        final int id = Integer.valueOf(vendor.get_id()) + 1;
        final Response r1 = db.saveAttachment(inputStream, vendor.getName() + ".txt", contentType, String.valueOf(id), null);
        vendor.setAttachment(r1);
        final Response r = db.post(vendor);

        System.out.println("Vendor created successfully. Id: " + r.getId() + ", rev: " + r.getRev());
        System.out.println("File created successfully. Id: " + r1.getId() + ", rev: " + r1.getRev());

    }

我在这里尝试检索数据:

public List<Vendor> getAllVendors()
    {
        List<Vendor> Vendors = new ArrayList<Vendor>();
        final List<Vendor> vend2 = new ArrayList<Vendor>();

        //Get db
        final Database db = getDb();
        final InputStream s = null;
        //Get all documents
        Vendors = db.view("_all_docs").includeDocs(true).query(Vendor.class);

        final Database db1 = getDb();

          for (final Vendor vend : Vendors) { 

          final Response r1 = vend.getAttachment(); 

          final int id = Integer.valueOf(vend.get_id()) + 1;

         // Here I am look to the attachment with the _ID and _REV
          final InputStream in = db1.find(r1.getId(), r1.getRev()); vend.setInput(in); vend2.add(vend);

           }

        return Vendors;
    }

在最后一个代码中,我打算创建一个包含我的所有供应商数据和 blob 的新列表。 当我添加供应商时(在第一部分),我将附件的“响应”保存在供应商对象中,因此当我尝试检索时我有数据可以使用(_id 和 _rev)。

我假设您想列出所有包含附件的文档。如果是这样,您可以 create a MapReduce view 类似于此:

function(doc) {
  if (doc._attachments) {
    emit(doc._id, null);
  }
}

然后您可以使用类似这样的方式调用视图以获取包含附件的文档的文档 ID 列表:

GET /dbname/_design/designdocname/_view/docswithattachments

上面的 GET 请求在 Java 中看起来像这样:

  List<Foo> list = db.view("designdocname/docswithattachments")
    .query(Foo.class);