Fix: cannot edit file in remote server / Modify: separate preview and text-file content controller
This commit is contained in:
@@ -151,6 +151,7 @@ func (resp *Response) CheckHTTPResponse(status int) *Response {
|
||||
|
||||
type nopRSCloser struct {
|
||||
body io.ReadCloser
|
||||
size int64
|
||||
}
|
||||
|
||||
// GetRSCloser 返回带有空seeker的body reader
|
||||
@@ -161,6 +162,7 @@ func (resp *Response) GetRSCloser() (response.RSCloser, error) {
|
||||
|
||||
return nopRSCloser{
|
||||
body: resp.Response.Body,
|
||||
size: resp.Response.ContentLength,
|
||||
}, resp.Err
|
||||
}
|
||||
|
||||
@@ -174,7 +176,16 @@ func (instance nopRSCloser) Close() error {
|
||||
return instance.body.Close()
|
||||
}
|
||||
|
||||
// 实现 nopRSCloser seeker
|
||||
// 实现 nopRSCloser seeker, 只实现seek开头/结尾以便http.ServeContent用于确定正文大小
|
||||
func (instance nopRSCloser) Seek(offset int64, whence int) (int64, error) {
|
||||
if offset == 0 {
|
||||
switch whence {
|
||||
case io.SeekStart:
|
||||
return 0, nil
|
||||
case io.SeekEnd:
|
||||
return instance.size, nil
|
||||
}
|
||||
}
|
||||
return 0, errors.New("未实现")
|
||||
|
||||
}
|
||||
|
||||
@@ -156,14 +156,20 @@ func TestResponse_GetRSCloser(t *testing.T) {
|
||||
// 正常
|
||||
{
|
||||
resp := Response{
|
||||
Response: &http.Response{Body: ioutil.NopCloser(strings.NewReader("123"))},
|
||||
Response: &http.Response{ContentLength: 3, Body: ioutil.NopCloser(strings.NewReader("123"))},
|
||||
}
|
||||
res, err := resp.GetRSCloser()
|
||||
asserts.NoError(err)
|
||||
content, err := ioutil.ReadAll(res)
|
||||
asserts.NoError(err)
|
||||
asserts.Equal("123", string(content))
|
||||
_, err = res.Seek(0, 0)
|
||||
offset, err := res.Seek(0, 0)
|
||||
asserts.NoError(err)
|
||||
asserts.Equal(int64(0), offset)
|
||||
offset, err = res.Seek(0, 2)
|
||||
asserts.NoError(err)
|
||||
asserts.Equal(int64(3), offset)
|
||||
_, err = res.Seek(1, 2)
|
||||
asserts.Error(err)
|
||||
asserts.NoError(res.Close())
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ func TestRemoteCallback(t *testing.T) {
|
||||
"http://test/test/url",
|
||||
testMock.Anything,
|
||||
testMock.Anything,
|
||||
).Return(Response{
|
||||
).Return(&Response{
|
||||
Err: nil,
|
||||
Response: &http.Response{
|
||||
StatusCode: 200,
|
||||
|
||||
Reference in New Issue
Block a user