ASP.NET Dropbox API正在上载.pdf文件

本文关键字:上载 pdf 文件 NET Dropbox API ASP | 更新日期: 2023-09-27 17:58:34

我已经尝试使用这里提到的API的UploadAsync()上传pdf文件:https://www.dropbox.com/developers/documentation/dotnet#tutorial

文件被上传了,但它已经损坏,无法打开,我使用读取了pdf文件的内容

System.IO.File.ReadAllText(fileUri);

然后通过等待该函数上传文件,该函数返回dropbox上文件的可共享链接:

    public static async Task<string> UploadFile(string folder, string fileName, string content)
    {
        using (var mem = new MemoryStream(Encoding.UTF8.GetBytes(content)))
        {
            FileMetadata updated = await dbx.Files.UploadAsync(
            folder + "/" + fileName,
            WriteMode.Overwrite.Instance,
            body: mem);
            var arg1 = new Dropbox.Api.Sharing.CreateSharedLinkWithSettingsArg(folder + "/" + fileName);
            var share = await dbx.Sharing.CreateSharedLinkWithSettingsAsync(arg1);
            return share.Url;
        }
    }

我发现这与编码有关,因为上传的文件包含的字符与原始文件不同,但我找不到正确的编码,或者是否有更好的方法?

提前谢谢。

ASP.NET Dropbox API正在上载.pdf文件

System.IO.File.ReadAllText(fileUri)读取文件的字节并将其转换为字符串。然后使用CCD_ 2将字符串写回可以改变内容。

请跳过此转换并直接使用字节。例如

var content = System.IO.File.ReadAllBytes(fileUri);

并将函数从string content更改为byte[] content

public static async Task<string> UploadFile(string folder, string fileName, byte[] content)
{
    using (var mem = new MemoryStream(content))
    {
        FileMetadata updated = await dbx.Files.UploadAsync(
        folder + "/" + fileName,
        WriteMode.Overwrite.Instance,
        body: mem);
        var arg1 = new Dropbox.Api.Sharing.CreateSharedLinkWithSettingsArg(folder + "/" + fileName);
        var share = await dbx.Sharing.CreateSharedLinkWithSettingsAsync(arg1);
        return share.Url;
    }
}

此解决方案仍然会将整个文件内容复制到内存中。直接从文件中读取在内存消耗方面更有效。

public static async Task<string> UploadFile(string folder, string fileName, string fileUri)
{
    using (var mem = new FileStream(fileUri, FileMode.Open, FileAccess.Read))
    {
        FileMetadata updated = await dbx.Files.UploadAsync(
        folder + "/" + fileName,
        WriteMode.Overwrite.Instance,
        body: mem);
        var arg1 = new Dropbox.Api.Sharing.CreateSharedLinkWithSettingsArg(folder + "/" + fileName);
        var share = await dbx.Sharing.CreateSharedLinkWithSettingsAsync(arg1);
        return share.Url;
    }
}