Pylons + tw.forms: Upload file

เริ่มจากสร้าง widgets สำหรับทำ form สำหรับ upload file ใน widgets.py ดังนี้

class UploadForm(forms.TableForm):
    class fields(WidgetsList):
        file = forms.FileField()
        submit = forms.SubmitButton(attrs = {'value': "upload"})

upload_form = UploadForm(id = "upload_form")

จากนั้นก็แก้ template เลย

...
% from unlalign.widgets import upload_form %>
${h.literal(upload_form(action=h.url_for(controller='document', action='upload', id=c.document.id)))}
...

ต่อด้วย controller

...
class DocumentController(BaseController):
...
    def upload_unl(self):
        f = request.POST['file'].file
        # ได้ไฟล์มาละใน f ก็เป็นไฟล์ของ python ธรรมดา
        return "uploaded"

พอได้ไฟล์มาจะหาที่ copy เก็บไว้ถาวร หรือว่าจะเอาใส่ database หรือว่า อ่านมาทำอะไรสักอย่าง ก็แล้วแต่จะสร้างกันไป.

ใน PHP ผมใช้ is_uploaded_file ตรวจสอบว่าเป็นไฟล์ที่ upload มาจริงเปล่า เพราะอาจจะโดนหลอกเป็นปัญหาความปลอดภัยได้ แต่ไม่รู้ pylons มีหรือเปล่า. ไว้หากันต่อไป

อ้างอิง:

http://pylonsbook.com/alpha1/forms_and_validators

http://cakebaker.42dh.com/2006/04/15/file-upload-with-cakephp/

http://www.blognone.com/node/8747

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s