asp.net上传图片文件通过名称覆盖原有相同名称的文件出问题。。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net上传图片文件通过名称覆盖原有相同名称的文件出问题。。相关的知识,希望对你有一定的参考价值。

asp.net +.net framework 4.0 上传图片 并覆盖原有相同名称的图片。。本地运行成功,放到服务器上确出现该路径下图片被否决。。求解啊。。。本人是菜鸟级别的。。。。
我的目的就是要覆盖原有文件。。。。。在本地测试时运行正确。。也成功覆盖了。。但是把文件放到服务器就出错。。。怎么回事啊

参考技术A 设置一个别名,把当前时间加进去到秒级别,那样你保存的别名就是一个不会重复的名称了。网上有很多实例,可以找下本回答被提问者和网友采纳

Flask - 使用相同名称覆盖图像并显示新图像

【中文标题】Flask - 使用相同名称覆盖图像并显示新图像【英文标题】:Flask - Overwrite image using same name and display the new image 【发布时间】:2021-02-04 23:16:14 【问题描述】:

我创建了一个小flask网站,有2个功能:上传图片并在网站上展示。

网站总是以相同的名称image.png 保存新上传的图片,以替换之前上传的图片。当我上传一个新文件时,它会成功替换static/img 目录中的旧文件。但是,该网站继续显示旧图像。

我在 *** 上能找到的最接近的问题是 Overwriting Image with same name - Django。这里的答案建议使用信号,但没有解释为什么会这样。如果可能的话,我希望有人能澄清我做错了什么。

如何确保显示新上传的图片?

您可以使用以下信息重现我的情况。

目录结构

├── main.py
├── static
│   └── img
│       └── image.png
└── templates
    └── index.html

main.py

import os
from flask import Flask, request, redirect, url_for, render_template

app = Flask(__name__)

app.config['UPLOAD_FOLDER'] = 'static/img/'

@app.route('/', methods=['GET', 'POST'])
def home():
    if request.method == 'POST':
        file = request.files['image'] 
        filename = "image.png"
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
        return render_template('index.html', filename=filename)
    else:
        return render_template('index.html')

@app.route('/<filename>')
def display_img(filename):
    """Display image on website"""
    return redirect(url_for('static', filename='img/' + filename))

if __name__ == "__main__":
    app.run(debug=True)

index.html

<!-- Display Image -->
% if filename %
    <img src=" url_for('display_img', filename=filename) " >
% endif %

<!-- Upload Image Button -->
<form action="#", method="POST", enctype=multipart/form-data>
    <input type="file" name="image" id="image"/>
    <button type="submit" value="Submit">Submit</button>
</form>

【问题讨论】:

这听起来像是缓存控制问题。查看this post 以获得一些指导。您还可以尝试在display_img 内使用return redirect(url_for('static', filename='img/' + filename), code=307) 重定向307 @Abdou 谢谢!我禁用了烧瓶上的缓存,它起作用了! 【参考方案1】:

我有一个类似但略有不同的问题 - 当我覆盖我的 HTML 模板时,旧模板仍在显示。 在 app.config 中将 TEMPLATES_AUTO_RELOAD 设置为 True 解决了这个问题。

app.config['TEMPLATES_AUTO_RELOAD'] = True

【讨论】:

【参考方案2】:

正如@Abdou 在上面的评论中提到的那样,该网站正在使用缓存的图像来继续显示旧图像。在大多数情况下可能不是最佳的,但在这种情况下,通过将app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0 放在顶部来禁用缓存可以解决问题。

app = Flask(__name__)

app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0

...

if __name__ == "__main__":
    app.run(debug=True)

【讨论】:

以上是关于asp.net上传图片文件通过名称覆盖原有相同名称的文件出问题。。的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET利用.FileUpload上传图片并将图片名称保存到数据库,我要具体的代码

Flask - 使用相同名称覆盖图像并显示新图像

ASP.NET上传控件上传图片

asp.net如何避免把上传的文件覆盖掉

asp.net怎么用上传控件,上传图片!

ASP.NET MVC 获取带有用户 ID 的文件上传名称并应用于单独的字段