예제 #1
0
파일: views.py 프로젝트: d9pouces/Updoc
def upload_doc_api(request):
    user = request.user if request.user.is_authenticated else None
    if user is None:
        return HttpResponse(_('You must be logged to upload files.\n'), status=401)
    elif request.method != 'POST':
        return HttpResponse(_('Only POST requests are allowed.\n'), status=400)
    form = UploadApiForm(request.GET)
    if not form.is_valid():
        return HttpResponse(_('You must supply filename, name and keywords in your query.\n'), status=400)
    tmp_file = tempfile.NamedTemporaryFile(mode='wb', dir=settings.FILE_UPLOAD_TEMP_DIR, delete=False)
    c = False
    chunk = request.read(32768)
    while chunk:
        tmp_file.write(chunk)
        c = True
        chunk = request.read(32768)
    tmp_file.flush()
    if not c:
        os.remove(tmp_file.name)
        return HttpResponse(_('Empty file. You must POST a valid file.\n'), status=400)
    # ok, we have the tmp file

    existing_objs = list(UploadDoc.query(request).filter(name=form.cleaned_data['name'])[0:1])
    if existing_objs:
        doc = existing_objs[0]
        doc.keywords.clear()
    else:
        doc = UploadDoc(uid=str(uuid.uuid1()), name=form.cleaned_data['name'], user=user)
        doc.save()
    for keyword in strip_split(form.cleaned_data['keywords'].lower()):
        doc.keywords.add(Keyword.get(keyword))
    scall(request, 'updoc.process_file', to=[SERVER], doc_id=doc.id, filename=tmp_file.name,
          original_filename=os.path.basename(form.cleaned_data['filename']))
    return HttpResponse(_('File successfully uploaded. It will be uncompressed and indexed.\n'), status=200)
예제 #2
0
    def handle(self, *args, **options):
        # require
        user = None
        if options['user'] is not None:
            user = get_user_model().objects.get(username=options['user'])

        filename = options['filename']
        if filename.startswith('file://'):
            filename = filename[7:]
        if filename.startswith('http://') or filename.startswith('https://'):
            parsed_url = urlparse(filename)
            basename = os.path.basename(parsed_url.path)
            src_file = tempfile.NamedTemporaryFile()
            req = requests.get(filename, stream=True)
            chunk_size = 16384
            for chunk in req.iter_content(chunk_size):
                src_file.write(chunk)
        else:
            src_file = open(filename, mode='rb')
            basename = os.path.basename(filename)

        obj = UploadDoc(uid=str(uuid.uuid1()), user=user, name=options['name'] or basename)
        obj.save()
        process_uploaded_file(obj, src_file, basename)
        for keyword in options['keyword']:
            obj.keywords.add(Keyword.get(keyword.lower().strip()))
        obj.save()
예제 #3
0
파일: views.py 프로젝트: d9pouces/Updoc
def upload_doc_progress(request):
    form = FileUploadForm(request.POST, request.FILES)
    if not form.is_valid():
        raise PermissionDenied
    uploaded_file = request.FILES['file']
    tmp_file = tempfile.NamedTemporaryFile(mode='wb', dir=settings.FILE_UPLOAD_TEMP_DIR, delete=False)
    chunk = uploaded_file.read(16384)
    while chunk:
        tmp_file.write(chunk)
        chunk = uploaded_file.read(16384)
    tmp_file.flush()

    basename = os.path.basename(uploaded_file.name).rpartition('.')[0]
    if basename.endswith('.tar'):
        basename = basename[:-4]
    doc = UploadDoc(name=basename, user=request.user if request.user.is_authenticated else None,
                    uid=str(uuid.uuid1()))
    doc.save()
    scall(request, 'updoc.process_file', to=[SERVER], doc_id=doc.id, filename=tmp_file.name,
          original_filename=uploaded_file.name)
    # offer a correct name for the newly uploaded document
    form = MetadatadUploadForm(initial={'pk': doc.pk, 'name': basename, })
    template_values = {'form': form, }
    return TemplateResponse(request, 'updoc/upload_doc_progress.html', template_values)