knowledge-vault/discussions/project-thinking/创建上传MD和图片服务.md

3.7 KiB
Raw Blame History

wantsong: 我的服务器是CentOS我在服务器上部署了Nginx和Hugo我想有快速上传Markdown文件和图片的方法。 我想到的是Python开发两个页面一个用来上传MD一个上传图片图片放在服务器指定位置同时换一个随机名称放在返回的页面上供我在MD中引用。 我不想用github。 对于此,有没有现成的工具,你有什么建议?

GitHub Copilot: 你可以使用Flask框架来开发一个简单的Python应用程序实现Markdown文件和图片的上传功能。以下是一个基本的实现思路

  1. 创建一个Flask应用程序。
  2. 创建两个页面一个用于上传Markdown文件一个用于上传图片。
  3. 图片上传后保存到指定位置,并生成一个随机名称。
  4. 返回图片的URL供Markdown文件引用。

以下是一个示例代码:

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

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'uploads/'
app.config['ALLOWED_EXTENSIONS'] = {'md', 'jpg', 'jpeg', 'png', 'gif'}

def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/upload_md', methods=['GET', 'POST'])
def upload_md():
    if request.method == 'POST':
        if 'file' not in request.files:
            return 'No file part'
        file = request.files['file']
        if file.filename == '':
            return 'No selected file'
        if file and allowed_file(file.filename):
            filename = file.filename
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            return 'Markdown file uploaded successfully'
    return render_template('upload_md.html')

@app.route('/upload_image', methods=['GET', 'POST'])
def upload_image():
    if request.method == 'POST':
        if 'file' not in request.files:
            return 'No file part'
        file = request.files['file']
        if file.filename == '':
            return 'No selected file'
        if file and allowed_file(file.filename):
            ext = file.filename.rsplit('.', 1)[1].lower()
            filename = f"{uuid.uuid4()}.{ext}"
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            return f'Image uploaded successfully: <a href="/uploads/{filename}">{filename}</a>'
    return render_template('upload_image.html')

@app.route('/uploads/<filename>')
def uploaded_file(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'], filename)

if __name__ == '__main__':
    os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)
    app.run(host='0.0.0.0', port=5000)

同时你需要创建两个HTML模板文件

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Upload Files</title>
</head>
<body>
    <h1>Upload Files</h1>
    <a href="/upload_md">Upload Markdown</a><br>
    <a href="/upload_image">Upload Image</a>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Upload Markdown</title>
</head>
<body>
    <h1>Upload Markdown</h1>
    <form method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit" value="Upload">
    </form>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Upload Image</title>
</head>
<body>
    <h1>Upload Image</h1>
    <form method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit" value="Upload">
    </form>
</body>
</html>

你可以根据需要进一步扩展和优化这个示例。