Created
November 21, 2022 08:50
-
-
Save tzangms/eff3924f6a4bc36d88da09242d06ffae to your computer and use it in GitHub Desktop.
plupload example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$(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(''); | |
} | |
}); | |
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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