如何将文件内容上传到 post 正文中的网站
How to upload a file to website with file contents in post body
如何从浏览器将文件上传到我的网络服务器?服务器是用 Haskell 编写的,使用的是 Scotty。这是我尝试过的:
服务器:
{-# LANGUAGE OverloadedStrings #-}
module Main where
import qualified Data.ByteString.Lazy as BL
import qualified Web.Scotty as Scot
import qualified Control.Monad.IO.Class as Cm
import qualified Data.Digest.Pure.SHA as Dps
dir :: String
dir = "/home/t/fileUpload/"
main :: IO ()
main =
Scot.scotty 3000 $ do
Scot.get "/" $ Scot.file $ dir ++ "index.html"
Scot.post "/upload" $ do
contents <- Scot.body
let fileName = Dps.showDigest $ Dps.sha256 contents
Cm.liftIO $ BL.writeFile (dir ++ fileName) contents
index.html:
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
</head>
<body>
<form enctype="multipart/form-data" action="/upload" method="post">
<input type="file"> <input type="submit" value="Submit"></form>
</body>
</html>
当我访问 http://localhost:3000 in my browser, I click on the Browse button, choose a file, and click on Submit. Then it takes me to a blank page called http://localhost:3000/upload 时,一个文件被保存到“/home/t/fileUpload/somelonghash”。很好,但问题是保存的文件只包含如下内容:
-----------------------------172368540915173703481121109126--
这不是原始文件的内容。
-----------------------------172368540915173703481121109126--
那是 multipart/form-data
场地边界。如果这就是您得到的全部内容,则意味着该表单不包含要 post 到服务器的任何数据。我希望您可以通过给文件命名来显示您的文件:
<input type="file" name="myfile">
即使您这样做,您仍然会在响应 body 中获得边界和 headers,以及您的实际文件内容。您需要做的是解析 multipart/form-data
并从那里提取文件内容。如果您使用 files
函数,而不是使用 body
.
,我认为 Scotty 会为您做这件事
如何从浏览器将文件上传到我的网络服务器?服务器是用 Haskell 编写的,使用的是 Scotty。这是我尝试过的:
服务器:
{-# LANGUAGE OverloadedStrings #-}
module Main where
import qualified Data.ByteString.Lazy as BL
import qualified Web.Scotty as Scot
import qualified Control.Monad.IO.Class as Cm
import qualified Data.Digest.Pure.SHA as Dps
dir :: String
dir = "/home/t/fileUpload/"
main :: IO ()
main =
Scot.scotty 3000 $ do
Scot.get "/" $ Scot.file $ dir ++ "index.html"
Scot.post "/upload" $ do
contents <- Scot.body
let fileName = Dps.showDigest $ Dps.sha256 contents
Cm.liftIO $ BL.writeFile (dir ++ fileName) contents
index.html:
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
</head>
<body>
<form enctype="multipart/form-data" action="/upload" method="post">
<input type="file"> <input type="submit" value="Submit"></form>
</body>
</html>
当我访问 http://localhost:3000 in my browser, I click on the Browse button, choose a file, and click on Submit. Then it takes me to a blank page called http://localhost:3000/upload 时,一个文件被保存到“/home/t/fileUpload/somelonghash”。很好,但问题是保存的文件只包含如下内容:
-----------------------------172368540915173703481121109126--
这不是原始文件的内容。
-----------------------------172368540915173703481121109126--
那是 multipart/form-data
场地边界。如果这就是您得到的全部内容,则意味着该表单不包含要 post 到服务器的任何数据。我希望您可以通过给文件命名来显示您的文件:
<input type="file" name="myfile">
即使您这样做,您仍然会在响应 body 中获得边界和 headers,以及您的实际文件内容。您需要做的是解析 multipart/form-data
并从那里提取文件内容。如果您使用 files
函数,而不是使用 body
.