Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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# DropBox API调用上载零字节文件_C#_Rest_Api_Dropbox - Fatal编程技术网

C# DropBox API调用上载零字节文件

C# DropBox API调用上载零字节文件,c#,rest,api,dropbox,C#,Rest,Api,Dropbox,我尝试使用rest调用将文件上载到dropbox,但它并没有上载实际文件,而是上载了一个零字节的文件 请检查代码,如果我遗漏了什么,请告诉我 var task = Task.Run((Func<Task<int>>)OrderExtractUsecase.DropBox); task.Wait(); int x = task.Result; var task=task.Run((Func)OrderExtractUsecase.DropBox); task.Wait()

我尝试使用rest调用将文件上载到dropbox,但它并没有上载实际文件,而是上载了一个零字节的文件

请检查代码,如果我遗漏了什么,请告诉我

var task = Task.Run((Func<Task<int>>)OrderExtractUsecase.DropBox);
task.Wait();
int x = task.Result;
var task=task.Run((Func)OrderExtractUsecase.DropBox);
task.Wait();
INTX=任务。结果;
Dropbox任务代码为:

static async Task<int> DropBox()
    {
        try
        {
            Dropbox_Utility objDropBox = new Dropbox_Utility("<accessid>");
            foreach (string temp in fileList)
            {
                await objDropBox.Upload("/Assist", temp);
            }
            return 1;
        }
        catch(Exception ex)
        {
            return -1;
        }
    }
静态异步任务DropBox()
{
尝试
{
Dropbox_实用程序objDropBox=新Dropbox_实用程序(“”);
foreach(文件列表中的字符串临时值)
{
等待objDropBox.Upload(“/Assist”,temp);
}
返回1;
}
捕获(例外情况除外)
{
返回-1;
}
}
上传任务代码为:

    public async Task<string> Upload(string folder, string filefullpath)
    {
         string filename = string.Empty;
         string fileID = string.Empty;
         try
         {
            filename = Path.GetFileName(filefullpath);

            using (FileStream fileStream = File.OpenRead(filefullpath))
            {
                using (MemoryStream memoryStream = new MemoryStream())
                {
                    fileStream.CopyTo(memoryStream);
                    var response = await dbx.Files.UploadAsync(folder + "/" + filename, WriteMode.Overwrite.Instance, body: memoryStream);
                    fileID = response.Id;
                }
            }
        }
        catch (Exception ex) { throw; }
        finally { }
        return fileID;
    }
公共异步任务上载(字符串文件夹、字符串文件完整路径)
{
字符串文件名=string.Empty;
string fileID=string.Empty;
尝试
{
filename=Path.GetFileName(filefullpath);
使用(FileStream FileStream=File.OpenRead(filefullpath))
{
使用(MemoryStream MemoryStream=new MemoryStream())
{
CopyTo(memoryStream);
var response=await dbx.Files.UploadAsync(文件夹+“/”+文件名,WriteMode.Overwrite.Instance,正文:memoryStream);
fileID=response.Id;
}
}
}
catch(异常ex){throw;}
最后{}
返回fileID;
}

如awh112所述,您需要重置
内存流的位置。在
copyTo
之后,
memoryStream
位置是文件的长度。因此,您的代码将上载一个零字节文件。我已经证实了以下几点:

fileStream.CopyTo(memoryStream);
Console.WriteLine(memoryStream.Position);
var response = await dbx.Files.UploadAsync(folder + "/" + filename, WriteMode.Overwrite.Instance, body: memoryStream);
Console.WriteLine((response as FileMetadata).Size);
打印:(在我的例子中,我的测试文件只有12字节长)

您可以像这样倒带它:

fileStream.CopyTo(memoryStream);
Console.WriteLine(memoryStream.Position);
memoryStream.Position = 0;
Console.WriteLine(memoryStream.Position);
var response = await dbx.Files.UploadAsync(folder + "/" + filename, WriteMode.Overwrite.Instance, body: memoryStream);
Console.WriteLine((response as FileMetadata).Size);
上面印着:

12
0
12

然后,生成的上载文件包含预期的内容。

在复制之前,您可能需要重置流的位置。请参见此处的答案:@awh112不工作:(@gerg现在还没有上传文件,如果我使用的是secound peice of code当我使用上述代码时,下面是我得到的输出,2019880 0 2019880@Gerg@JiteshDammani您是如何检查的?您共享的输出表明
memoryStream
确实收到了
2019880
字节,并且uplo从Dropbox返回的
FileMetadata.Size
证明,aded文件也是完整的
2019880
。顺便说一句,除非您出于其他原因需要单独的
MemoryStream
,否则您应该完全放弃它,直接从
文件流上传即可。
12
0
12