Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用asp.net mvc从Google Drive Api下载文件时出现的问题

使用asp.net mvc从Google Drive Api下载文件时出现的问题
EN

Stack Overflow用户
提问于 2020-10-28 14:32:30
回答 1查看 588关注 0票数 2

我可以在本地服务器上成功下载文件,但在部署后,我不能继续加载而不下载

代码语言:javascript
运行
AI代码解释
复制
  <a href="~/Home/DownloadFile/@item.Id">Download</a>

HomeController.cs

代码语言:javascript
运行
AI代码解释
复制
 public void DownloadFile(string id)
    {
        string FilePath = DownloadGoogleFile(id);
       
        Response.AddHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(FilePath));
        Response.WriteFile(System.Web.Hosting.HostingEnvironment.MapPath("/GoogleDriveFiles/" + Path.GetFileName(FilePath)));
        Response.End();
        Response.Flush();
    }
    static string DownloadGoogleFile(string fileId)
    {
        Google.Apis.Drive.v3.DriveService service = GetService();

        string FolderPath = System.Web.Hosting.HostingEnvironment.MapPath("/GoogleDriveFiles/");
        Google.Apis.Drive.v3.FilesResource.GetRequest request = service.Files.Get(fileId);

        string FileName = request.Execute().Name;
        string FilePath = System.IO.Path.Combine(FolderPath, FileName);

        MemoryStream stream1 = new MemoryStream();
        request.MediaDownloader.ProgressChanged += (Google.Apis.Download.IDownloadProgress progress) =>
        {
            switch (progress.Status)
            {
                case DownloadStatus.Downloading:
                    {
                        Console.WriteLine(progress.BytesDownloaded);
                        break;
                    }
                case DownloadStatus.Completed:
                    {
                        Console.WriteLine("Download complete.");
                        SaveStream(stream1, FilePath);
                        break;
                    }
            }
        };
        request.Download(stream1);
        return FilePath;
    }

   
   public static Google.Apis.Drive.v3.DriveService GetService()
    {
        var CSPath = System.Web.Hosting.HostingEnvironment.MapPath("~/");
        UserCredential credential;
        using (var stream = new FileStream(Path.Combine(CSPath, "client_secret.json"), FileMode.Open, FileAccess.Read))
        {
            
            String FilePath = Path.Combine(CSPath, "DriveServiceCredentials.json");

            credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(stream).Secrets,
                Scopes,
                "user",
                CancellationToken.None,
                new FileDataStore(FilePath, true)).Result;
        }

        Google.Apis.Drive.v3.DriveService service = new Google.Apis.Drive.v3.DriveService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = "GoogleDriveRestAPI-v3",
        });

        return service;
    }

我应该改变什么?我正在尝试从谷歌获取文件,它本身而不是从浏览器是SSL证书和安全的网络有一些事情,因为我的网络现在不安全?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-29 07:55:44

在向Google进行身份验证时,已安装的应用程序和web应用程序之间存在差异。已安装的应用程序可以在当前机器上的浏览器中打开授权窗口,Web应用程序需要打开web浏览器才能在用户机器上进行授权。GoogleWebAuthorizationBroker.AuthorizeAsync专为使用已安装的应用程序而设计。它将在服务器上打开web浏览器进行身份验证和授权,这将不起作用。

对于web应用程序,您应该使用GoogleAuthorizationCodeFlow

代码语言:javascript
运行
AI代码解释
复制
using System;
using System.Web.Mvc;

using Google.Apis.Auth.OAuth2;
using Google.Apis.Auth.OAuth2.Flows;
using Google.Apis.Auth.OAuth2.Mvc;
using Google.Apis.Drive.v2;
using Google.Apis.Util.Store;

namespace Google.Apis.Sample.MVC4
{
    public class AppFlowMetadata : FlowMetadata
    {
        private static readonly IAuthorizationCodeFlow flow =
            new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
                {
                    ClientSecrets = new ClientSecrets
                    {
                        ClientId = "PUT_CLIENT_ID_HERE",
                        ClientSecret = "PUT_CLIENT_SECRET_HERE"
                    },
                    Scopes = new[] { DriveService.Scope.Drive },
                    DataStore = new FileDataStore("Drive.Api.Auth.Store")
                });

        public override string GetUserId(Controller controller)
        {
            // In this sample we use the session to store the user identifiers.
            // That's not the best practice, because you should have a logic to identify
            // a user. You might want to use "OpenID Connect".
            // You can read more about the protocol in the following link:
            // https://developers.google.com/accounts/docs/OAuth2Login.
            var user = controller.Session["user"];
            if (user == null)
            {
                user = Guid.NewGuid();
                controller.Session["user"] = user;
            }
            return user.ToString();

        }

        public override IAuthorizationCodeFlow Flow
        {
            get { return flow; }
        }
    }
}

请参阅完整的示例here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64575017

复制
相关文章
如何查找一个域名的子域名记录
起因是在Cloudflare和DNSPod添加域名时系统会扫描待添加域名的子域解析记录,感觉很神奇。
kr
2022/07/23
8.4K0
sql查找最晚一天,日期最大的一条记录 两种方法
例:查找最晚入职员工的所有信息 CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) NOT NULL, `last_name` varchar(16) NOT NULL, `gender` char(1) NOT NULL, `hire_date` date NOT NULL, PRIMARY KEY (`emp_no`));
用户7741497
2022/03/08
5.2K0
Pandas案例精进 | 无数据记录的日期如何填充?
因业务需要,每周需要统计每天提交资源数量,但提交时间不定,可能会有某一天或者某几天没有提,那么如何将没有数据的日期也填充进去呢?
朱小五
2021/10/18
2.6K0
Pandas案例精进 | 无数据记录的日期如何填充?
mysql查找最后一条记录_mysql查询记录总数
首先要确定什么是最后一条。 是编辑时间最新的为最后一条,还是某个字段数字最大的未最后一条。 比如以时间最大为最后一条,则将符合条件的资料都筛选出来,再按时间排序,再取一笔资料。 SQL如下:
全栈程序员站长
2022/10/04
6.9K0
记录修改Typecho日期格式的问题
我们在制作Typecho主题的时候,默认官方提供的日期格式是类似July 8, 2020,这样子的,我们可能需要其他的格式,比如2020-08-08。所以我们只需要找到对应模板中的日期格式就可以。这里简单记录一下,如果以后有需要的话可以使用到。
老蒋
2021/12/24
2K0
nginx根据日期记录日志
if ($time_iso8601 ~ "(\d{4})-(\d{2})-(\d{2})") {
93年的老男孩
2019/12/18
1.6K0
记录查找分享观影记录软件TrackTV
你是否有过这样的烦恼,不久前刚看过一个有趣的电影,但是一下子就想不起来,需要花费好长时间的搜索和思考才能记起来。
程序那些事儿
2023/03/07
8020
记录查找分享观影记录软件TrackTV
MongoDB-查找表里面重复的记录
项目中使用的是mongodb数据库,在测试数据入库的时候,会根据源数据,然后生成一个自增的id到数据库里面,然后线上和测试环境针对同一条数据的id是不一致的。某些数据又只有id与线上匹配上的时候,才能关联上更多的数据,因此,我会去写一个脚本将同一条数据,将测试环境的id改成和线上的一致。但可能由于脚本写的还不够完善,导致数据库里面可能会写入一些重复id的记录进去,然后id又没有加唯一索引。有重复的数据又会导致正常执行etl任务会报错,因此,需要查询出在mongodb里面某个字段重复的记录。
小博测试成长之路
2023/02/24
2.3K0
MongoDB-查找表里面重复的记录
查找一 线性表的查找
静默虚空
2018/01/05
1K0
查找一 线性表的查找
一日一技:如何提取网页中的日期?
最近我发现Python的一个第三方库,叫做htmldate,经过测试,它提取新闻的发布时间比较准确。我们来看看这个库怎么使用。首先使用pip安装:
青南
2022/04/07
1.6K0
一日一技:如何提取网页中的日期?
在MySQL中查找重复记录
I want to pull out duplicate records in a MySQL Database. 我想在MySQL数据库中提取重复记录。 This can be done with: 这可以通过以下方式完成:
kirin
2021/04/30
3.9K0
mysql 记录根据日期字段倒序输出
select * from water where phoneNumber=@phoneNumber order by cast(date as datetime) desc
kirin
2021/01/29
3.1K0
Nginx access log 按日期保存记录
$time_iso8601    生成格式:2021-09-18T15:16:35+08:00 $time_local          生成格式: 18/Sep/2021:15:12:13 +0800
用户1349575
2022/03/18
4.3K0
golang如何计算两个日期之间的日期差?
golang如何计算两个日期之间的日期差? 日期格式:“2017-09-01” ,“2018-03-11”
双面人
2022/09/28
7.5K0
如何用Python获取两个日期之间的日期?
问:如何用Python获取两个日期之间的日期? def date_range(start, end): delta = end - start # as timedelta days = [start + timedelta(days=i) for i in range(delta.days + 1)] return days start_date = datetime(2020, 12, 1) end_date = datetime(2020, 12, 5) print(d
TalkPython
2020/12/11
5.9K0
如何在Selenium WebDriver中查找元素?(一)
有多种方法可以唯一地标识网页中的一个Web元素,例如ID,名称,类名,链接文本,部分链接文本,标记名和XPATH。
用户7466307
2020/06/24
6.2K0
idea如何查找替换_pycharm查找替换
在平时敲代码的时候经常碰到,咦,这个变量名好像不太合适,但又写了好多这时候可以怎么办呢? Pycharm/Idea里面给我们准备了替换功能
全栈程序员站长
2022/09/27
2.7K0
idea如何查找替换_pycharm查找替换
EXCEL中日期对应的数值如何转换为ABAP中的日期
默认情况下,Excel把1900-1-1 0:00:00存储为1,把1900-1-1 0:00:00以后的每一个时刻存储为该时刻与1900-1-1 0:00:00这个时刻的差值(以天为单位)。
matinal
2023/10/13
2930
OJ刷题记录:散列查找实验
题目描述: 请设计一个整型闭散列表,散列函数为除留余数法,处理冲突时的探查方法为线性探查法,其中散列表的长度、除留余数法的模和关键码的个数由键盘输入,再根据输入由键盘输入所有的关键码。分别对三个待查值在散列表中进行查找,如果找到了输出位置,如果没找到,输出“none”并把该待查值插入到散列表中,如果散列表满输出“full”。
英雄爱吃土豆片
2020/11/12
5820
点击加载更多

相似问题

SERVER基于一年内最早日期的获取记录

11

Excel如何返回一年内的日期

10

如何从两年内获得记录

13

从当前日期起的最后一年内修改记录。

21

如何根据记录的日期时间查找记录

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档