Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过HTTPS上传.mp4_C#_Uwp_Giphy Api - Fatal编程技术网

C# 通过HTTPS上传.mp4

C# 通过HTTPS上传.mp4,c#,uwp,giphy-api,C#,Uwp,Giphy Api,我正在尝试将一个.mp4文件上载到Giphy.com的API。它说以“二进制”的形式发送文件,我想我不明白它们到底是什么意思。如果您在“Upload Endpoint”(上传端点)处滚动到底部,这里是文档 这是我现在拥有的 我尝试过多个版本(使用StringContent,MultipartFormDataContent,ByteArrayContent,HttpMessages…等),总是得到一个“400-错误请求-无源Url”(文档说,如果您上传自己的Url,则不需要该Url)这让我相信内容

我正在尝试将一个.mp4文件上载到Giphy.com的API。它说以“二进制”的形式发送文件,我想我不明白它们到底是什么意思。如果您在“Upload Endpoint”(上传端点)处滚动到底部,这里是文档

这是我现在拥有的

我尝试过多个版本(使用
StringContent
MultipartFormDataContent
ByteArrayContent
HttpMessages
…等),总是得到一个“400-错误请求-无源Url”(文档说,如果您上传自己的Url,则不需要该Url)这让我相信内容没有被识别

    public async Task<HttpResponseMessage> UploadVideoAsync(StorageFile file)
    {
        using (var stream = await file.OpenStreamForReadAsync())
        {
            byte[] bytes = new byte[stream.Length];
            await stream.ReadAsync(bytes, 0, (int)stream.Length);

            Dictionary<string, string> dic = new Dictionary<string, string>
            {
                { "file", Encoding.ASCII.GetString(bytes) },
                { "api_key", api_key }
            };

            MultipartFormDataContent multipartContent = new MultipartFormDataContent();
            multipartContent.Add(new ByteArrayContent(bytes));
            var response = await httpClient.PostAsync($"v1/gifs?api_key={api_key}", multipartContent);
            var stringResponse = await response.Content.ReadAsStringAsync();
            return response;

        }
    }
公共异步任务上载VideoAsync(存储文件)
{
使用(var stream=await file.OpenStreamForReadAsync())
{
字节[]字节=新字节[stream.Length];
wait stream.ReadAsync(字节,0,(int)stream.Length);
字典dic=新字典
{
{“文件”,Encoding.ASCII.GetString(字节)},
{“api_键”,api_键}
};
MultipartFormDataContent multipartContent=新的MultipartFormDataContent();
添加(新的ByteArrayContent(字节));
var response=wait httpClient.PostAsync($“v1/gifs?api_key={api_key}”,multipartContent);
var stringResponse=await response.Content.ReadAsStringAsync();
返回响应;
}
}

您的代码似乎与{api_key}不匹配。在任何地方都不能使用“dic”变量。您可以尝试使用
v1/gifs?api\u key=YOUR\u api\u key&file=
。您的API密钥应替换为从giphy获得的API密钥

总是得到一个“400-错误请求-无源Url”(文档说,如果你上传自己的内容,就不需要这个Url),这让我相信内容没有被识别

    public async Task<HttpResponseMessage> UploadVideoAsync(StorageFile file)
    {
        using (var stream = await file.OpenStreamForReadAsync())
        {
            byte[] bytes = new byte[stream.Length];
            await stream.ReadAsync(bytes, 0, (int)stream.Length);

            Dictionary<string, string> dic = new Dictionary<string, string>
            {
                { "file", Encoding.ASCII.GetString(bytes) },
                { "api_key", api_key }
            };

            MultipartFormDataContent multipartContent = new MultipartFormDataContent();
            multipartContent.Add(new ByteArrayContent(bytes));
            var response = await httpClient.PostAsync($"v1/gifs?api_key={api_key}", multipartContent);
            var stringResponse = await response.Content.ReadAsStringAsync();
            return response;

        }
    }
您需要为
ByteArrayContent
应用名称。已显示,
请求参数
包含“文件:如果未提供源图像url,则需要字符串(二进制)”

代码应如下所示:

MultipartFormDataContent multipartContent = new MultipartFormDataContent();
multipartContent.Add(new ByteArrayContent(bytes),"file");

对不起,我以前用过,但后来改为使用ByteArrayContent和url中的api_键。将文件添加到url的问题是,它的长度为1.4百万个字符。URI只能在2000左右。如果只发送以下内容,您会得到任何响应(以及什么):v1/gifs?api_key=您的_api_key或直接这样做:ByteArrayContent byteContent=new ByteArrayContent(数据);HttpResponseMessage-Response=等待客户端.postSync(uri,字节内容);我收到“无源Url”错误。这就是为什么我认为这是内容的格式问题,因为无论哪种方式都是相同的错误。我回家后会尝试直接添加它。您确定需要放置实际的文件字节数组吗?在file=解决问题后,是否可以尝试放置本地文件名?