4

我正在尝试下载并保存 PDF,但在写入时出现 EOF 错误失败。这样做的正确方法是什么?

(with-open-file (file "/home/*/test.pdf"
                      :direction :io
                      :if-does-not-exist :create
                      :if-exists :supersede
                      :element-type '(unsigned-byte 8))
  (let ((input (drakma:http-request "http://www.fractalconcept.com/ex.pdf"
                                    :want-stream t)))
    (awhile (read-byte input)
      (write-byte it file))
    (close input)))
4

3 回答 3

8

解决方案是我忘了使用的两个可选参数read-byte.

正确的方法是设置eof-error-p和:eof-valuenil

(with-open-file (file "/home/*/test.pdf"
                      :direction :output
                      :if-does-not-exist :create
                      :if-exists :supersede
                      :element-type '(unsigned-byte 8))
  (let ((input (drakma:http-request "http://www.fractalconcept.com/ex.pdf"
                                    :want-stream t)))
    (awhile (read-byte input nil nil)
      (write-byte it file))
    (close input)))
于 2012-09-26T17:44:21.267 回答
1

AWHILE 在包 ARNESI 中。

于 2012-09-29T12:27:45.203 回答
1
(ql:quickload "trivial-download")
(trivial-download:download URL FILE)

; 几乎完全按照您的代码执行的操作,但块更大,并且可以显示进度条。

; QuickLisp可以在http://QuickLisp.org找到。

于 2017-11-07T20:33:06.990 回答