Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
51bfe06f
提交
51bfe06f
authored
11月 16, 2014
作者:
Matt Bell
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
commands/http: Support recursive multipart in MultiFileReader
上级
9d2ee4f1
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
39 行增加
和
6 行删除
+39
-6
client.go
commands/http/client.go
+1
-1
multifilereader.go
commands/http/multifilereader.go
+38
-5
没有找到文件。
commands/http/client.go
浏览文件 @
51bfe06f
...
...
@@ -50,7 +50,7 @@ func (c *client) Send(req cmds.Request) (cmds.Response, error) {
var
fileReader
*
MultiFileReader
if
req
.
Files
()
!=
nil
{
fileReader
=
NewMultiFileReader
(
req
.
Files
())
fileReader
=
NewMultiFileReader
(
req
.
Files
()
,
true
)
}
path
:=
strings
.
Join
(
req
.
Path
(),
"/"
)
...
...
commands/http/multifilereader.go
浏览文件 @
51bfe06f
...
...
@@ -2,8 +2,10 @@ package http
import
(
"bytes"
"fmt"
"io"
"mime/multipart"
"net/textproto"
cmds
"github.com/jbenet/go-ipfs/commands"
)
...
...
@@ -12,15 +14,20 @@ type MultiFileReader struct {
io
.
Reader
files
cmds
.
File
currentFile
cmds
.
File
currentFile
io
.
Reader
buf
bytes
.
Buffer
mpWriter
*
multipart
.
Writer
closed
bool
// if true, the data will be type 'multipart/form-data'
// if false, the data will be type 'multipart/mixed'
form
bool
}
func
NewMultiFileReader
(
file
cmds
.
File
)
*
MultiFileReader
{
func
NewMultiFileReader
(
file
cmds
.
File
,
form
bool
)
*
MultiFileReader
{
mfr
:=
&
MultiFileReader
{
files
:
file
,
form
:
form
,
}
mfr
.
mpWriter
=
multipart
.
NewWriter
(
&
mfr
.
buf
)
...
...
@@ -35,16 +42,42 @@ func (mfr *MultiFileReader) Read(buf []byte) (written int, err error) {
// if the current file isn't set, advance to the next file
if
mfr
.
currentFile
==
nil
{
mfr
.
currentFile
,
err
=
mfr
.
files
.
NextFile
()
if
err
==
io
.
EOF
||
(
err
==
nil
&&
mfr
.
currentF
ile
==
nil
)
{
file
,
err
:
=
mfr
.
files
.
NextFile
()
if
err
==
io
.
EOF
||
(
err
==
nil
&&
f
ile
==
nil
)
{
mfr
.
mpWriter
.
Close
()
mfr
.
closed
=
true
}
else
if
err
!=
nil
{
return
0
,
err
}
// handle starting a new file part
if
!
mfr
.
closed
{
_
,
err
:=
mfr
.
mpWriter
.
CreateFormFile
(
"file"
,
mfr
.
currentFile
.
FileName
())
if
file
.
IsDirectory
()
{
// if file is a directory, create a multifilereader from it
// (using 'multipart/mixed')
mfr
.
currentFile
=
NewMultiFileReader
(
file
,
false
)
}
else
{
// otherwise, use the file as a reader to read its contents
mfr
.
currentFile
=
file
}
// write the boundary and headers
header
:=
make
(
textproto
.
MIMEHeader
)
if
mfr
.
form
{
contentDisposition
:=
fmt
.
Sprintf
(
"form-data; name=
\"
file
\"
; filename=
\"
%s
\"
"
,
file
.
FileName
())
header
.
Set
(
"Content-Disposition"
,
contentDisposition
)
}
else
{
header
.
Set
(
"Content-Disposition"
,
fmt
.
Sprintf
(
"file; filename=
\"
%s
\"
"
,
file
.
FileName
()))
}
if
file
.
IsDirectory
()
{
boundary
:=
mfr
.
currentFile
.
(
*
MultiFileReader
)
.
Boundary
()
header
.
Set
(
"Content-Type"
,
fmt
.
Sprintf
(
"multipart/mixed; boundary=%s"
,
boundary
))
}
else
{
header
.
Set
(
"Content-Type"
,
"application/octet-stream"
)
}
_
,
err
:=
mfr
.
mpWriter
.
CreatePart
(
header
)
if
err
!=
nil
{
return
0
,
err
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论