Skip to content

Instantly share code, notes, and snippets.

@tzangms
Created November 21, 2022 08:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tzangms/eff3924f6a4bc36d88da09242d06ffae to your computer and use it in GitHub Desktop.
Save tzangms/eff3924f6a4bc36d88da09242d06ffae to your computer and use it in GitHub Desktop.
plupload example
$(function() {
var uploader = new plupload.Uploader({
runtimes : 'flash,html5,silverlight,html4',
url : plupload_url,
browse_button : 'pickfiles',
container : 'plupload_container',
max_file_size : '150mb',
chunk_size: '1mb',
multipart: true,
unique_names : true,
multi_selection: false,
flash_swf_url : static_url + 'plupload/plupload.flash.swf',
silverlight_xap_url : static_url + 'plupload/plupload.silverlight.xap',
headers : {'X-Requested-With' : 'XMLHttpRequest', 'X-CSRFToken' : csrf_token},
filters : [
{title : "audio file", extensions : "mp3"}
]
});
uploader.bind('Init', function(up, params) {
//$('#filelist').html("<div>Current runtime: " + params.runtime + "</div>");
});
uploader.init();
uploader.bind('FilesAdded', function(up, files) {
$('.progress').show();
uploader.start();
$('#pickfiles').hide();
});
uploader.bind('UploadProgress', function(up, file) {
$('#' + file.id + " b").html(file.percent + "%");
$('.progress-bar').css('width', file.percent + '%');
$('.progress-bar').text(file.percent + '%');
//$('.progress-bar').attr('aria-valuenow', file.percent);
});
uploader.bind('Error', function(up, err) {
$('#pickfiles').show();
$('.progress').hide();
var message = '{% trans "File upload error, Please choose file to upload again." %}';
alert(message);
up.refresh(); // Reposition Flash/Silverlight
});
uploader.bind('FileUploaded', function(up, file, response) {
$('#' + file.id + " b").html("100%");
resp = JSON.parse(response.response);
if (resp.success) {
location.href = resp.redirect_url;
} else {
alert(resp.message);
$('#filelist').text('');
}
});
});
@login_required
def episode_plupload(request):
podcast = get_object_or_404(Podcast, user=request.user)
uploaded_file = request.FILES.get('file', None)
chunk = request.REQUEST.get('chunk', '0')
chunks = request.REQUEST.get('chunks', '0')
name = request.REQUEST.get('name', '')
if not name:
name = uploaded_file.name
# save chunk
filepath = '%s/%s' % (settings.FILE_UPLOAD_TEMP_DIR, name)
with open(filepath, ('wb' if chunk == '0' else 'ab')) as f:
for content in uploaded_file.chunks():
f.write(content)
# chunks uploaded, save episode
if int(chunk) + 1 >= int(chunks):
# session data
title = request.session.get('title', None)
description = request.session.get('description', '')
keywords = request.session.get('keywords', '')
# open file for save later
"""
f = open(filepath)
episode_file = ContentFile(f.read())
f.close()
"""
# save song
filename = "%s.mp3" % shortuuid.uuid()
with transaction.commit_on_success():
try:
item = MP3(filepath)
length = int(item.info.length)
bitrate = item.info.bitrate
except HeaderNotFoundError:
length = 1
bitrate = 1
# upload to dropbox
url = 'https://api-content.dropbox.com/1/files_put/auto/%s' % filename
# upload file
f = open(filepath)
token = Credential.objects.get(user=request.user).access_token
headers = {'Authorization': 'Bearer %s' % token}
r = requests.post(url, f.read(), headers=headers)
f.close()
if not r.ok:
return HttpResponse(json.dumps({'success': False, 'message': r.json()['error']}))
# get dropbox shares
url = 'https://api.dropbox.com/1/shares/auto/' + filename
token = Credential.objects.get(user=request.user).access_token
headers = {'Authorization': 'Bearer %s' % token}
params = urllib.urlencode({'short_url': False})
r = requests.get(url + '?' + params, headers=headers)
data = r.json()
dropbox_url = data['url'].replace('?dl=0', '?dl=1')
episode = Episode()
episode.user = request.user
episode.podcast = podcast
episode.title = title
episode.description = description
episode.size = 0 #episode_file.size
episode.length = length
episode.bitrate = bitrate
episode.dropbox_url = dropbox_url
episode.save()
episode.tags.set(*filter(None, re.split(',|\s', keywords)))
# delete old file
os.remove(filepath)
# twitter update
if request.user.username != 'tzangms':
status = u"「%s」上傳了新節目: %s ( http://www.myaudiocast.com%s )" % (podcast.title, episode.title, episode.get_absolute_url())
twitter_update(status)
message = _('File uploaded successfully')
redirect_url = reverse('manage-episode-upload-done')
return HttpResponse(json.dumps({'success': True, 'message': message, 'redirect_url': redirect_url}))
return HttpResponse('')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment