Clojure 如何将文件保存在服务器中?

Clojure 如何将文件保存在服务器中?,clojure,ring,Clojure,Ring,我正在使用(->req:params)提取的服务器中收到以下请求: 它包含一个带有名称和blobId的文件“video”。但是,我希望访问文件的数据并将其保存到文件中。到目前为止,我已经尝试了以下方法: (defn upload-shot-video [req] (prn "uploading video") (prn "video is! " (-> req :multipart-params)) (prn "video is

我正在使用(->req:params)提取的服务器中收到以下请求:

它包含一个带有名称和blobId的文件“video”。但是,我希望访问文件的数据并将其保存到文件中。到目前为止,我已经尝试了以下方法:

(defn upload-shot-video [req]
  (prn "uploading video")
  (prn "video is! " (-> req :multipart-params))
  (prn "video is " (-> req :params))
  (prn "video before is " (slurp (-> req :body)))
  (.reset (-> req :body))
  (prn "req full" (-> req))
  (prn "video after is " (-> req :body))
  (prn "video is! " (-> req :multipart-params))
  (clojure.java.io/copy (-> req :body) (clojure.java.io/file "./resources/public/video.mov"))

  (let [filename (str (rand-str 100) ".mov")]
    (s3/put-object
     :bucket-name "humboi-videos"
     :key filename
     :file "./resources/public/video.mov"
     :access-control-list {:grant-permission ["AllUsers" "Read"]})
    (db/add-video {:name (-> req :params :name)
                   :uri (str "https://humboi-videos.s3-us-west-1.amazonaws.com/" filename)}))
  (r/response {:res "okay!"}))

我试图将(->req:body)保存到文件中(这是一个inputstream)。这肯定是错误的。通过将数据保存到服务器上的文件中,将服务器接收到的文件保存到文件中的正确方法是什么?如何从请求中提取此数据?

如果您使用的是Ring,则需要使用wrap多部分参数中间件

(ns控制器)
(:require[ring.middleware.params:参考[wrap params]]
[ring.middleware.multipart-params:参考[wrap multipart-params]]
(defn上传快照视频[req]
(让[upload file(->req:params“file”:tempfile);;这是您的文件的java.io.file实例
(保存上传的文件)
{:状态201:body“上传完成”})
(def应用程序
(->上传快照视频
包裹参数
包装多部分参数)
(defn upload-shot-video [req]
  (prn "uploading video")
  (prn "video is! " (-> req :multipart-params))
  (prn "video is " (-> req :params))
  (prn "video before is " (slurp (-> req :body)))
  (.reset (-> req :body))
  (prn "req full" (-> req))
  (prn "video after is " (-> req :body))
  (prn "video is! " (-> req :multipart-params))
  (clojure.java.io/copy (-> req :body) (clojure.java.io/file "./resources/public/video.mov"))

  (let [filename (str (rand-str 100) ".mov")]
    (s3/put-object
     :bucket-name "humboi-videos"
     :key filename
     :file "./resources/public/video.mov"
     :access-control-list {:grant-permission ["AllUsers" "Read"]})
    (db/add-video {:name (-> req :params :name)
                   :uri (str "https://humboi-videos.s3-us-west-1.amazonaws.com/" filename)}))
  (r/response {:res "okay!"}))