基于ajax的图片上传
前端代码
<div class="form-group">
<label for="thumbnail-form">缩略图</label>
<div class="input-group">
<input type="text" class="form-control" id="thumbnail-form" name="thumbnail" placeholder="缩略图">
<span class="input-group-btn">
<label class="btn btn-file btn-default">上传图片
<input id="thumbnail-btn" hidden type="file" class="btn btn-default">
</label>
</span>
</div>
</div>
News.prototype.lisntenUploadFileEvent = function(){
var thumbnailBtn = $('#thumbnail-btn');
thumbnailBtn.change(function () {
var file = thumbnailBtn[0].files[0];
var csrf_value = $("[name='csrfmiddlewaretoken']").val();
var formData = new FormData();
formData.append('file',file);
formData.append('csrfmiddlewaretoken',csrf_value);
$.ajax({
url:'/cms/upload_file/',
type:'post',
data:formData,
processData:false,
contentType:false,
success:function (result) {
if(result['code']===200){
console.log(result['data']);
var url = result['data']['url'];
var thumbnailInput = $('#thumbnail-form');
thumbnailInput.val(url)
}
}
})
});
};
后端代码
@require_POST
def upload_file(request):
file = request.FILES.get('file')
name = file.name
with open(os.path.join(settings.MEDIA_URL,settings.MEDIA_ROOT,name),'wb') as fp:
for chunk in file.chunks():
fp.write(chunk)
url = request.build_absolute_uri(settings.MEDIA_URL+name)
return restful.result(data={'url':url})
app_name = 'cms'
urlpatterns = [
path('upload_file/',views.upload_file,name='upload_file'),
]
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
from django.conf import settings
urlpatterns = [
...
] + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)