diff --git a/docs/webapi.txt b/docs/webapi.txt index 6b97019b6..e4685e3be 100644 --- a/docs/webapi.txt +++ b/docs/webapi.txt @@ -179,7 +179,9 @@ f. uploading a file This action also uploads a file without attaching it to a virtual drive directory, but can be used from an HTML form. The response is an HTML page that describes the results of the upload, including the resulting URI (but - also including information about which peers were used, etc). + also including information about which peers were used, etc). If a + when_done=URL argument is provided, the reponse is a redirect to the given + URL instead of the upload-results page. POST http://localhost:8123/uri?t=upload&mutable=true diff --git a/src/allmydata/test/test_web.py b/src/allmydata/test/test_web.py index c6ba8d48a..eb7fb809d 100644 --- a/src/allmydata/test/test_web.py +++ b/src/allmydata/test/test_web.py @@ -1011,11 +1011,7 @@ class Web(WebMixin, unittest.TestCase): d = self.POST("/uri", t="upload", when_done="/", file=("new.txt", self.NEWFILE_CONTENTS)) d.addBoth(self.shouldRedirect, "/") - # XXX Test that resulting welcome page has a "most recent - # upload", the URI of which points to the file contents that - # you just uploaded. return d - test_POST_upload_no_link_whendone.todo = "Not yet implemented." def test_POST_upload_no_link_mutable(self): d = self.POST("/uri", t="upload", mutable="true", diff --git a/src/allmydata/webish.py b/src/allmydata/webish.py index ae47138f1..8704f6dde 100644 --- a/src/allmydata/webish.py +++ b/src/allmydata/webish.py @@ -1256,6 +1256,17 @@ class UnlinkedPOSTCHKUploader(rend.Page): d = client.upload(uploadable) d.addBoth(self._done.fire) + def renderHTTP(self, ctx): + req = inevow.IRequest(ctx) + when_done = get_arg(req, "when_done", None) + if when_done: + # if when_done= is provided, return a redirect instead of our + # usual upload-results page + d = self._done.when_fired() + d.addCallback(lambda res: url.URL.fromString(when_done)) + return d + return rend.Page.renderHTTP(self, ctx) + def upload_results(self): return self._done.when_fired()