【问题标题】:Can't upload video through Imgur API with javascript on client无法使用客户端上的 javascript 通过 Imgur API 上传视频
【发布时间】:2020-10-24 22:47:51
【问题描述】:

我在使用 Imgur API 时遇到问题。我收到了用于匿名上传媒体文件的 clientId。然后我尝试将此凭据用于 API 请求。我在使用“https://api.imgur.com/3/upload”路由从客户端浏览器 Javascript 上传时遇到问题,但后来我发现“https://api.imgur.com/3/image”有效正如预期的图像上传(以 base64 格式),但无法按预期的视频上传(二进制格式,因为 base64 返回错误),在更改以二进制格式发送视频的方法后,我收到了 200 个响应代码,但我收到的唯一信息(除了状态信息)是“票证”字段,没有其他信息(没有错误消息或代码)。而且我不知道如何使用这些信息来访问上传的视频。这种类型的响应没有记录在任何地方,我不确定它是否应该像现在这样工作。你能帮我处理这个案子吗?也许有人有类似的情况。我附上了来自 Chrome 的 'har' 请求信息,这样你就可以看到我是如何提出请求的,也许我在某个地方弄错了。真的在等你的答复,谢谢!

HAR request info

发送文件功能:

 sendFile = async (fileObj) => {
    const myHeaders = new Headers();
    myHeaders.append('Authorization', uploadCredentials);

    const formData = new FormData(),
        {
            type
        } = fileObj,
        fileTitle = fileObj.file.name.split('.').shift(),
        splitDataMarker = ';base64,';
    let fileData;

    if (type === 'image') {
        const indexOfMarker = fileObj.data.indexOf(splitDataMarker),
            indexOfDataStart = indexOfMarker ? indexOfMarker + splitDataMarker.length : 0;

        fileData = fileObj.data.substr(indexOfDataStart);
        formData.append('type', 'base64');
    } else if (type === 'video') {
        formData.append('type', 'file');
        const res = await fetch(fileObj.data);
        fileData = await res.blob();
    }
    formData.append(type, fileData);
    formData.append('name', fileObj.file.name);
    formData.append('title', fileTitle);

    const requestOptions: any = {
        method: 'POST',
        headers: myHeaders,
        body: formData,
        redirect: 'follow',
    };

    try {
        const res = await fetch(uploadUrl, requestOptions),
            data = await res.json();

        return data;
    } catch (error) {
        throw Error(error);
    }
},

【问题讨论】:

    标签: javascript api video upload imgur


    【解决方案1】:

    您的问题在这里得到解答:https://stackoverflow.com/a/57240243

    简而言之:对于视频,您需要使用/upload api 端点并包含一个名称为video 的文件。

    如果你将文件作为base64编码值包含在POST正文中,那么你需要将type设置为base64,如果是附加的,那么你需要将类型设置为file

    # If base64 body data:
    curl --location --request POST 'https://api.imgur.com/3/upload' --header 'Authorization: Client-ID 3a49f81624b9a16' --data 'image=R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7&type=base64&disable_audio=0'
    CLIENT_ID=3a49f81624b9a16; curl --location --request POST 'https://api.imgur.com/3/upload' --header "Authorization: Client-ID $CLIENT_ID" --data 'image=R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7&type=base64&disable_audio=0'
    
    
    # If reading file (in this case, from stdin:
    echo 'R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7' | base64 --decode | curl --location --request POST 'https://api.imgur.com/3/upload' --header "Authorization: Client-ID $CLIENT_ID" -F 'type=file' -F 'disable_audio=0' -F 'image=@-'
    

    在以上两个示例中,对于视频,将 image= 更改为 video=

    【讨论】:

      猜你喜欢
      • 2012-08-04
      • 2020-07-22
      • 2019-12-05
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多