Flask - 下载文件后删除

4

我需要帮助解决我的代码问题。 在我的网站中,我无法解决一个问题。 我通过JavaScript解释代码,创建一个链接,让您下载静态文件夹中请求的文档。 操作如下。

@ App.route ( '/ static / document / <path: name>', methods = [ 'POST'])
def downloads (name): #name is the name of the document
    return os.remove (name)

接着我获取了文档,但文件并未被删除。这是下载该文件所需的javascript代码。

downloadlink var = document.createElement ( "a");
                        d = obj.d; # D is download method before
                        downloadlink.href = d;
                        downloadlink.className = "DOWNLOAD_LINK";
                        downloadlink.download = n;
                        downloadlink.onClick = setTimeout (function () {location.reload (true);}, 30000);
                        downloadlink.innerHTML = "<p> Download document" + n + "</ p>";
                        document.getElementById ( "results"). appendChild (downloadlink);

我哪里做错了吗?


你确定你的 name 是正确的路径,无论是相对于 Python 脚本还是绝对路径?使用绝对路径更容易。在应用程序的配置中,您可以指定类似于 basedir = os.path.abspath(os.path.dirname(__file__)) 的内容,然后将其用于静态文件路径,如:STATIC_DIR = os.path.join(basedir, 'app/static')。最终,在操作文件时,您可以像这样做:os.remove(os.path.join(app.config['STATIC_DIR'], name)) - vrs
@vrs 我也以为我犯了这个错误。 所以我直接插入了os.remove命令(“static/document/name_file”) 即使这样,我还是删除了它。 我以为是JavaScript中嵌入的下载命令。 为什么链接会出现这样: <a href="{{url_for('download',name="document.pdf")}}">download>下载</a> 但即使如此。 我不知道该怎么做。 - Zrufy
@Bigzil 把它发布为答案并接受它,这样其他遇到相同问题的人就可以轻松找到解决方案。 - vrs
1个回答

9

这个问题可以通过以下代码解决。

@app.route('/path/<name>') 
def download(name): 
   file_path ="/path/"+name
   file_handle = open(file_path, 'r')

   @after_this_request 
   def remove_file(response): 
      os.remove("/path/"+name) 
      return response 

   return send_file(file_handle)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接