Compare commits
11 Commits
Author | SHA1 | Date | |
---|---|---|---|
9910bc279c | |||
f100732e4d | |||
46420eecda | |||
7b372a7b6f | |||
5570710432 | |||
ba68674e4e
|
|||
99ff2c68a3 | |||
dd069bf395 | |||
f21adfa04e | |||
3d5c55498f | |||
5e2be10434 |
7
.github/README.md
vendored
Normal file
7
.github/README.md
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
# imgupload
|
||||
|
||||
## Moving from GitHub to Gitea
|
||||
|
||||
**TL;DR: Please go to my Gitea instance instead of GitHub for anything related to imgupload. [https://git.bbaovanc.com/bbaovanc/imgupload](https://git.bbaovanc.com/bbaovanc/imgupload)**
|
||||
|
||||
This repository might not exist on GitHub in the future! Releases will not be released here in the future. Instead, they will be released on the repository on my Gitea instance, which you can find [here](https://git.bbaovanc.com/bbaovanc/imgupload). Issues and pull requests should also be created on Gitea. For now, commits will still be pushed to this repository, but that may change in the future.
|
87
README.md
87
README.md
@ -1,26 +1,87 @@
|
||||
# imgupload
|
||||
     
|
||||
|
||||
### What is imgupload?
|
||||
<!---
|
||||

|
||||

|
||||

|
||||

|
||||
-->
|
||||
|
||||
## What is imgupload?
|
||||
|
||||
imgupload is a Flask + uWSGI application to serve as an all-purpose image/file uploader over POST requests.
|
||||
|
||||
### Installation
|
||||
1. Clone the repository: `git clone https://github.com/BBaoVanC/imgupload.git`
|
||||
2. Enter the imgupload directory: `cd imgupload`
|
||||
3. Create a virtualenv: `python3 -m venv env`
|
||||
4. Enter the virtualenv: `source env/bin/activate`
|
||||
5. Install dependencies: `python3 -m pip install -r requirements.txt`
|
||||
6. Run the Flask app
|
||||
---
|
||||
|
||||
## FAQ
|
||||
|
||||
**Where can I send bug reports and feature requests?**
|
||||
|
||||
You can create an issue [here](https://git.bbaovanc.com/bbaovanc/imgupload/issues).
|
||||
|
||||
**How do I use this program?**
|
||||
|
||||
See [Installation](#installation)
|
||||
|
||||
**I want to make a pull request. Where should I do that?**
|
||||
|
||||
First, fork [this repository](https://git.bbaovanc.com/bbaovanc/imgupload). If you don't have an account on my Gitea site yet, you can either create one, or sign in using your GitHub account. Commit your changes to your fork, and then create a pull request.
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
|
||||
## Running the Flask app
|
||||
### Using uWSGI
|
||||
[https://uwsgi-docs.readthedocs.io/en/latest/Configuration.html](https://uwsgi-docs.readthedocs.io/en/latest/Configuration.html)
|
||||
|
||||
Instructions specific to imgupload are coming soon
|
||||
Note: replace `www-data` with whatever user your webserver runs as.
|
||||
|
||||
1. Make /srv/imgupload: `sudo mkdir /srv/imgupload`
|
||||
2. Change ownership of /srv/imgupload: `sudo chown www-data:www-data /srv/imgupload`
|
||||
3. Enter www-data user: `sudo su www-data`
|
||||
4. Change directories to /srv/imgupload: `cd /srv/imgupload`
|
||||
5. Clone the repository: `git clone https://git.bbaovanc.com/bbaovanc/imgupload.git`
|
||||
6. Enter the imgupload directory: `cd imgupload`
|
||||
7. Create a virtualenv: `python3 -m venv env`
|
||||
8. Enter the virtualenv: `source env/bin/activate`
|
||||
9. Install dependencies: `python3 -m pip install -r requirements.txt`
|
||||
10. Leave the www-data user: `exit`
|
||||
11. Copy the default uWSGI configuration: `sudo cp /srv/imgupload/uwsgi.ini.default /etc/uwsgi/apps-available/imgupload.ini`
|
||||
12. Modify `/etc/uwsgi/apps-available/imgupload.ini` to your preferences
|
||||
13. Enable imgupload: `sudo ln -s /etc/uwsgi/apps-available/imgupload.ini /etc/uwsgi/apps-enabled/`
|
||||
14. Restart uWSGI: `sudo systemctl restart uwsgi`
|
||||
15. Set up your webserver to proxy the uwsgi.sock
|
||||
|
||||
Example NGINX location block:
|
||||
```nginx
|
||||
location /upload {
|
||||
include uwsgi_params;
|
||||
uwsgi_pass unix:/srv/imgupload/uwsgi.sock;
|
||||
client_max_body_size 25M;
|
||||
}
|
||||
```
|
||||
|
||||
### Using Flask development server
|
||||
|
||||
|
||||
#### Setup
|
||||
|
||||
```shell
|
||||
$ git clone https://git.bbaovanc.com/bbaovanc/imgupload.git
|
||||
$ cd imgupload
|
||||
$ python3 -m venv env
|
||||
$ source env/bin/activate
|
||||
$ pip3 install -r requirements.txt
|
||||
```
|
||||
|
||||
#### Run
|
||||
|
||||
```shell
|
||||
$ source env/bin/activate # if you haven't already entered the virtualenv
|
||||
$ export FLASK_APP=imgupload.py
|
||||
$ flask run
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## License
|
||||
|
||||
_imgupload_ is licensed under the GPLv3 license. For more information, please refer to [`LICENSE`](https://git.bbaovanc.com/bbaovanc/imgupload/src/branch/master/LICENSE)
|
||||
|
@ -4,6 +4,7 @@ configtest.py
|
||||
|
||||
Tests the validity of your configuration in settings.py.
|
||||
"""
|
||||
|
||||
import os
|
||||
import settings as settings
|
||||
|
||||
@ -84,8 +85,6 @@ if "ROOTURL" in checksettings:
|
||||
pass
|
||||
else:
|
||||
rooturl_good = False
|
||||
print(settings.ROOTURL)
|
||||
print(settings.ROOTURL.startswith("https://"))
|
||||
print("[!] ROOTURL does not start with `http://` or `https://`! This may cause issues!")
|
||||
if not settings.ROOTURL.endswith("/"):
|
||||
rooturl_good = False
|
||||
|
@ -4,6 +4,7 @@ functions.py
|
||||
|
||||
Functions used by imgupload which can be easily customized.
|
||||
"""
|
||||
|
||||
import string
|
||||
import random
|
||||
|
||||
|
22
imgupload.py
22
imgupload.py
@ -4,6 +4,7 @@ imgupload.py
|
||||
|
||||
Flask application for processing images uploaded through POST requests.
|
||||
"""
|
||||
|
||||
from flask import Flask, request, jsonify, Response
|
||||
from flask_api import status
|
||||
from pathlib import Path
|
||||
@ -66,12 +67,27 @@ def upload():
|
||||
|
||||
fext = Path(f.filename).suffix # get the uploaded extension
|
||||
if allowed_extension(fext): # if the extension is allowed
|
||||
print("Generating file with extension {0}".format(fext))
|
||||
fname = functions.generate_name() + fext # generate file name
|
||||
print("Generated name: {0}".format(fname))
|
||||
if not "imageName" in request.form.keys():
|
||||
print("Generating file with extension {0}".format(fext))
|
||||
fname = functions.generate_name() + fext # generate file name
|
||||
print("Generated name: {0}".format(fname))
|
||||
else:
|
||||
fname = request.form["imageName"]
|
||||
if len(fname) > 0:
|
||||
print("Request imageName: {0}".format(fname))
|
||||
if not fname.lower().endswith(fext.lower()): # if requested name doesn't have the correct extension
|
||||
fname += fext # add the extension
|
||||
print("Added extension; new filename: {0}".format(fname))
|
||||
else:
|
||||
print("Requested filename is blank!")
|
||||
fname = functions.generate_name() + fext # generate a valid filename
|
||||
print("Generated name: {0}".format(fname))
|
||||
|
||||
if f: # if the uploaded image exists
|
||||
print("Uploaded image exists")
|
||||
if Path(os.path.join(settings.UPLOAD_FOLDER, fname)).is_file():
|
||||
print("Requested filename already exists!")
|
||||
return jsonify({'status': 'error', 'error': 'FILENAME_TAKEN'}), status.HTTP_409_CONFLICT
|
||||
f.save(os.path.join(settings.UPLOAD_FOLDER, fname)) # save the image
|
||||
print("Saved to {0}".format(fname))
|
||||
url = settings.ROOTURL + fname # construct the url to the image
|
||||
|
12
uwsgi.ini.default
Normal file
12
uwsgi.ini.default
Normal file
@ -0,0 +1,12 @@
|
||||
[uwsgi]
|
||||
socket = /srv/imgupload/uwsgi.sock
|
||||
chmod-socket = 755
|
||||
chdir = /srv/imgupload
|
||||
venv = /srv/imgupload/env
|
||||
master = true
|
||||
module = imgupload:app
|
||||
processes = 10
|
||||
threads = 1
|
||||
uid = www-data
|
||||
gid = www-data
|
||||
plugins = python3,logfile
|
Reference in New Issue
Block a user