application-research / estuary

A custom IPFS/Filecoin node that makes it easy to pin IPFS content and make Filecoin deals.
https://docs.estuary.tech
Other
239 stars 67 forks source link

Files uploaded using FormData placed incorrectly within collection. #931

Open pythonicode opened 1 year ago

pythonicode commented 1 year ago

UPDATE

I'm getting the expected behavior when running estuary locally and making requests to localhost:3004 from my app, but when I make requests to api.estuary.tech I'm getting the extra directory issue.

The only difference I can tell between the requests is that the request to api.estuary.tech is using an perms=upload API key so I will try testing to see if that makes any difference.

This is also reproducible behavior if you use the Estuary docs.

ISSUE

Describe the bug When uploading files using FormData to /content/add?coluuid=[coluuid]&overwrite=true&dir=/ causes to files not to exist in the root directory / but instead under a subdirectory with the file name for example under /[file name].

To Reproduce Upload a file using FormData and dir=/ and coluuid=[coluuid] then check result of /collection/:coluuid.

Expected behavior Uploaded file should be under root directory as specified by search param dir

Actual behavior Uploaded file is under a subdirectory with the same name as the file.

Additional context Slack discussion: https://filecoinproject.slack.com/archives/C016APFREQK/p1677178196959089

pythonicode commented 1 year ago

Testing this locally using a cloned version of this repository and I'm not getting the same issue. Will try to reproduce locally.

UPDATE I'm getting the expected behavior when running estuary locally and making requests to localhost:3004 from my app, but when I make requests to api.estuary.tech I'm getting the extra directory issue.

The only difference I can tell between the requests is that the request to api.estuary.tech is using an perms=upload API key so I will try testing to see if that makes any difference.

pythonicode commented 1 year ago

EDIT: I now realize that I should be testing using the shuttles. Having issues building, but I'm sure the issue can be found somewhere in cmd/estuary-shuttle

I tried helplessly to recreate the issue on localhost with no luck (this is using the most recent main branch of estuary). Not sure why when using the actual endpoint I'm getting the extra directory, here are the exact same requests and the results of each:

const response = await fetch(`https://api.estuary.tech/content/add?coluuid=${user.collectionId}&overwrite=true&dir=/`, {
    method: 'POST',
    body: form,
    headers: {
        'Accept': 'application/json',
        'Authorization': `Bearer ${user.apiKey}`
    }
});

[
  {
    id: 142858874,
    createdAt: '2023-02-24T19:55:39.613238Z',
    updatedAt: '2023-02-24T19:55:39.613238Z',
    cid: 'bafkreid7dky6z7x4nr7vqbwnqn2roop76nfpxcpjv5qk3giahwbuq5bpqu',
    name: 'subfile.png',
    userId: 341,
    description: '',
    size: 8848,
    type: 0,
    active: true,
    offloaded: false,
    replication: 6,
    aggregatedIn: 0,
    aggregate: false,
    pinning: true,
    pinMeta: '',
    replace: false,
    origins: '',
    failed: false,
    location: 'SHUTTLEdd6d5754-eb26-439a-a753-7d6e824325e7HANDLE',
    dagSplit: false,
    splitFrom: 0,
    pinningStatus: '',
    dealStatus: '',
    path: '/subfile.png/subfile.png'
  }
]

const response = await fetch(`http://localhost:3004/content/add?coluuid=685cd56d-93d3-4f61-89ee-e5ea036d2bd7&overwrite=true&dir=/`, {
    method: 'POST',
    body: form,
    headers: {
        'Accept': 'application/json',
        'Authorization': `Bearer {API key with perms=upload}`
    }
});

[
  {
    "id": 6,
    "createdAt": "2023-02-25T03:28:18.311279386Z",
    "updatedAt": "2023-02-25T03:28:18.311279386Z",
    "cid": "bafkreiehzremeji2voxc4mxsoqw4pry736s6z2t5nh23win272fo3rert4",
    "name": "subfile.png",
    "userId": 1,
    "description": "",
    "size": 8848,
    "type": 0,
    "active": true,
    "offloaded": false,
    "replication": 6,
    "aggregatedIn": 0,
    "aggregate": false,
    "pinning": false,
    "pinMeta": "",
    "replace": false,
    "origins": "[{\"ID\":\"12D3KooWCNSYCRFnPtf4WSdB2oXKJhkStPSiW9NdEthGWgKJLLBG\",\"Addrs\":[\"/ip4/10.129.11.192/tcp/6744\"]},{\"ID\":\"12D3KooWCNSYCRFnPtf4WSdB2oXKJhkStPSiW9NdEthGWgKJLLBG\",\"Addrs\":[\"/ip4/127.0.0.1/tcp/6744\"]},{\"ID\":\"12D3KooWCNSYCRFnPtf4WSdB2oXKJhkStPSiW9NdEthGWgKJLLBG\",\"Addrs\":[\"/ip4/128.12.123.59/tcp/54531\"]},{\"ID\":\"12D3KooWCNSYCRFnPtf4WSdB2oXKJhkStPSiW9NdEthGWgKJLLBG\",\"Addrs\":[\"/ip4/128.12.123.59/tcp/54639\"]}]",
    "failed": false,
    "location": "local",
    "dagSplit": false,
    "splitFrom": 0,
    "pinningStatus": "",
    "dealStatus": "",
    "path": "/subfile.png"
  }
]

The only difference I see is with the location being local vs. shuttle and of course the path is screwed up for the first one, @gmelodie I know you did some work with collections, do you have any idea what's going on?