Skip to content

Instantly share code, notes, and snippets.

@nmz787
Created May 7, 2013 07:40
Show Gist options
  • Save nmz787/5530888 to your computer and use it in GitHub Desktop.
Save nmz787/5530888 to your computer and use it in GitHub Desktop.
pdf bookmarklet uploader
var testUrl = 'http://link.springer.com.ezproxy.rit.edu/content/pdf/10.1007/s11207-013-0286-8.pdf';
var xhr = new XMLHttpRequest();
xhr.open("GET", window.location, false);
xhr.send(null);
function crossDomainPost() {
// Add the iframe with a unique name
var iframe = document.createElement("iframe");
var uniqueString = "CHANGE_THIS_TO_SOME_UNIQUE_STRING";
document.body.appendChild(iframe);
iframe.style.display = "none";
iframe.contentWindow.name = uniqueString;
// construct a form with hidden inputs, targeting the iframe
var form = document.createElement("form");
form.target = uniqueString;
form.action = "http://diyhpl.us:5000/~nmz787/addpdf";
form.method = "POST";
// repeat for each parameter
var input = document.createElement("input");
input.type = "file";
input.name = "testFile";
input.value = xhr.responseText;
form.appendChild(input);
document.body.appendChild(form);
form.submit();
}
var xhr2 = new XMLHttpRequest();
xhr2.open("POST", 'http://diyhpl.us:5000/~nmz787/addpdf', false);
xhr2.setRequestHeader('crossDomain','true');
var formData = new FormData();
formData.append("thefile", xhr.responseText);
xhr2.send(formData);
alert('Done');
import os
from flask import Flask, request, redirect, url_for
from werkzeug import secure_filename
from datetime import timedelta
from flask import make_response, request, current_app
from functools import update_wrapper
def crossdomain(origin=None, methods=None, headers=None,
max_age=21600, attach_to_all=True,
automatic_options=True):
if methods is not None:
methods = ', '.join(sorted(x.upper() for x in methods))
if headers is not None and not isinstance(headers, basestring):
headers = ', '.join(x.upper() for x in headers)
if not isinstance(origin, basestring):
origin = ', '.join(origin)
if isinstance(max_age, timedelta):
max_age = max_age.total_seconds()
def get_methods():
if methods is not None:
return methods
options_resp = current_app.make_default_options_response()
return options_resp.headers['allow']
def decorator(f):
def wrapped_function(*args, **kwargs):
if automatic_options and request.method == 'OPTIONS':
resp = current_app.make_default_options_response()
else:
resp = make_response(f(*args, **kwargs))
if not attach_to_all and request.method != 'OPTIONS':
return resp
h = resp.headers
h['Access-Control-Allow-Origin'] = origin
h['Access-Control-Allow-Methods'] = get_methods()
h['Access-Control-Max-Age'] = str(max_age)
if headers is not None:
h['Access-Control-Allow-Headers'] = headers
return resp
f.provide_automatic_options = False
f.required_methods = ['OPTIONS']
return update_wrapper(wrapped_function, f)
return decorator
UPLOAD_FOLDER = '/home/nmz787/public_html/pdf'
ALLOWED_EXTENSIONS = set(['pdf'])
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS
@app.route('/~nmz787/addpdf', methods=['POST'])
@crossdomain(origin='*', headers='crossDomain')
def upload_file():
if request.method == 'POST':
file = request.files['file']
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return redirect(url_for('uploaded_file',
filename=filename))
return
app.run(host='0.0.0.0')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment