2011-09-18 13 views
8

का उपयोग कर सर्वर पर फ़ाइल अपलोड करने के लिए कैसे मैं एक ऐसा फॉर्म लिखने की कोशिश कर रहा हूं जो उपयोगकर्ताओं को मेरे सर्वर पर फ़ाइल अपलोड करने की अनुमति दे। मैंने देखा कि यसोड फ़ाइल कार्यक्षमता के लिए फ़ाइल एफ़ॉर्मरैक का उपयोग करता है लेकिन इसे काम करने में असमर्थ था, संकलन त्रुटियों में चल रहा था, जिसमें से नवीनतम था: "कोई उदाहरण नहीं (रेंडर मैसेज माईसाइट टी)" किसी भी प्रकार का उपयोग करने के लिए उदाहरण के लिए कोई उदाहरण नीचे इसकी अत्यधिक सराहना की जाएगी। धन्यवाद, उरीयसोड

+0

हाय उरी, बस मामले में, मैंने एक पूर्ण फ़ाइल अपलोड लिखने के लिए एक छोटी ब्लॉग पोस्ट लिखी है (अपलोड की गई फाइलों की सेवा करना, उन्हें यसोड में संदर्भित करना और उन्हें हटाना) https://ersocon.net/blog/2017/ 2/18/फ़ाइल-अपलोड-के साथ-yesod – Alebon

उत्तर

13

अपडेट 13 सितम्बर 2012: एक अधिकारी फ़ाइल here


अपलोड करने समारोह fileAFormReq पर Googling के लिए मदद पृष्ठ बनाए रखा

नहीं है मुझे इस example दे दी है।

मैंने केवल प्रासंगिक भागों के साथ इसका एक न्यूनतम संस्करण बनाया है।

{-# LANGUAGE OverloadedStrings #-} 
{-# LANGUAGE QuasiQuotes, TypeFamilies, TemplateHaskell, MultiParamTypeClasses #-} 
import Yesod.Core 
import Yesod.Form 
import Yesod.Form.MassInput 
import Control.Applicative 
import Data.Text (Text, pack) 
import Network.Wai.Handler.Warp (run) 
import Data.Time (utctDay, getCurrentTime) 
import qualified Data.Text as T 
import Control.Monad.IO.Class (liftIO) 

mkYesod "HelloForms" [parseRoutes| 
/file FileR GET POST 
|] 

data HelloForms = HelloForms 

instance RenderMessage HelloForms FormMessage where 
    renderMessage _ _ = defaultFormMessage 

instance Yesod HelloForms where 
    approot _ = "" 


main = toWaiApp HelloForms >>= run 3000 

fileForm = renderTable $ pure (,) 
    <*> fileAFormReq "Required file" 
    <*> fileAFormOpt "Optional file" 

getFileR = do 
    ((res, form), enctype) <- runFormPost fileForm 
    defaultLayout [whamlet| 
<p>Result: #{show res} 
<form method=post enctype=#{enctype}> 
    <table> 
     ^{form} 
    <tr> 
     <td> 
      <input type=submit> 
|] 

postFileR = getFileR 

इस runhaskell और फिर आपके ब्राउज़र में http://localhost:3000/file जाएँ।

उम्मीद है कि इससे मदद मिलती है। :)


संपादित करें:

ओह प्रतीक्षा करें, यह स्पष्ट है कि तुम क्या याद आ रही रहे हैं। चूंकि संकलन त्रुटि ने अभी कहा है, आप अपने फाउंडेशन के लिए RenderMessage उदाहरण खो रहे हैं।

मुझे पता है कि i18n के हालिया प्रयासों ने फॉर्म-पैकेज को थोड़ा बदल दिया है। यदि आप yesod के नवीनतम संस्करण का उपयोग कर रहे हैं, तो this देखें।

मैंने चिपकाया कोड yesod-forms पैकेज के पुराने गैर-i18n (डिफ़ॉल्ट साधन अंग्रेजी) संस्करण का उपयोग करता है।

+2

धन्यवाद। गायब उदाहरण त्रुटि वास्तव में फ़ाइल का उपयोग नहीं कर रहा है, ठीक से फ़ाइल का उपयोग नहीं कर रहा है (ghc में परिणामस्वरूप यह एक और रेंडर मैसेज उदाहरण है और न केवल उस व्यक्ति को , जो बहुत भ्रमित था)। वैसे भी यह पूरी तरह से काम करता है, तो धन्यवाद! –

संबंधित मुद्दे