如何使用curl在Dspace 6 REST API中上传比特流

问题描述 投票:2回答:1

我正在尝试使用curl使用DSpace 6的REST API上传文件:

curl -k -4 \
    -H "Content-Type: multipart/form-data" \
    --cookie "JSESSIONID=E7B87CCFA35FB83670F379072505580E" \
    -H "accept: application/json" \
    -X POST "http://localhost:5553/rest/items/4f7b0dba-428d-458a-854d-141350b9b678/bitstreams?name=Picture.jpg" \
    -F '[email protected]'

发送正确完成,这是响应:

{"uuid":"737b78b7-8369-4b47-a36a-69ddd7f24bda","name":"Picture.jpg","handle":null,"type":"bitstream","expand":["parent","policies","all"],"bundleName":"ORIGINAL","description":null,"format":"JPEG","mimeType":"image/jpeg","sizeBytes":570897,"parentObject":null,"retrieveLink":"/rest/bitstreams/737b78b7-8369-4b47-a36a-69ddd7f24bda/retrieve","checkSum":{"value":"0dec466b8d8546a60f39882f7735f084","checkSumAlgorithm":"MD5"},"sequenceId":-1,"policies":null,"link":"/rest/bitstreams/737b78b7-8369-4b47-a36a-69ddd7f24bda"}

但是当我尝试访问上传的(Inside DSpace)文件时,它表示它无效。尝试上传纯文本文件并将其添加到文件的顶部和末尾:

-------------------------- 9406e94bc5f35740 Content-Disposition:form-data; NAME = “上传”; filename =“data.txt”Content-Type:text / plain

[此处的文件内容]

-------------------------- 9406e94bc5f35740--

我尝试在nodejs中的请求但我得到相同的错误。一些帮助 ?提前致谢。

rest curl dspace
1个回答
1
投票

我使用curl命令中的-T(upload-file)参数解决了它:

curl -k -4 -v \
    -H "Content-Type: multipart/form-data" \
    --cookie "JSESSIONID=E7B87CCFA35FB83670F379072505580E" \
    -H "accept: application/json" \
    -X POST "http://localhost:5553/rest/items/4f7b0dba-428d-458a-854d-141350b9b678/bitstreams?name=picture.jpg" \
    -T 'picture.jpg'

在使用请求承诺的nodejs中:

const rp = require('request-promise')
const fs = require('fs');
const path = require('path');

const PostBitstream = async (itemId) => {

    try {

        const bitstream = fs.createReadStream(path.join('files', 'picture.jpg'));

        const params =  {
            method: 'POST',
            uri: `${BASE_URL}/items/${itemId}/bitstreams?name=${FILE_NAME}`,
            headers: { "Content-Type": "multipart/form-data", "accept": "application/json" },
            encoding: null,
            body: bitstream
        }

        const res = await rp(params);
        console.log(res);
    } catch (err) {

        console.log(err.stack);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.