百度云存储能不能够直接接收浏览器端要上传的文件?

2012-09-24 12:35:20 +08:00
 yibin001
sdk里只能上传一个本地文件,如果我要在我的应用里集成就意味着用户在上传附件时,要先传到我自己的服务器,再调用sdk传到百度,这有点多余啊,我想用户能直接上传到百度云存储。

目前想到用flash,但由于跨域,这个不能实现。
如果直接用form提交倒是可以,但不大友好,而且有点麻烦。
如果在bae里创建一个托管应用,flash往这个应用Post,再用这个应用往百度云提交倒是可以,但超过10M的话,bae就出报错。。。

有没有好的办法?
4379 次点击
所在节点    云计算
20 条回复
chaojie
2012-09-24 12:51:02 +08:00
“直接用form提交倒是可以”,难道这不是直接接收浏览器端要上传的文件?
yibin001
2012-09-24 12:55:39 +08:00
@chaojie
这固然可以,
但我需要放到一个论坛里,以上传附件的这种方式提供出来。
难道用js提交?然后获取响应头??
yaakua
2012-09-24 13:07:06 +08:00
异步提交,表面上看上去是异步提交,实际是使用iframe,iframe里面再使用form表单提交。
这样用户看上去不用刷新整个页面就可以提交文件了。
yibin001
2012-09-24 13:13:23 +08:00
@yaakua
这倒是个办法,那怎么知道这个iframe是否post完成?
chaojie
2012-09-24 13:18:30 +08:00
以前在sae中试过一种方法没有成功,没在bae中试过
就是把swf文件与crossdomain.xml文件都上传到云存储中,这样就是在同一个域下了,sae的storage用的是三级域名
yaakua
2012-09-24 13:18:43 +08:00
@yibin001
iframe里面的表单提交后,可以跳转到一个新的页面,这个页面可以调用父页面的js方法,这样就可以主动通知父页面当前iframe里面的表单提交完成了。
我以前做图片异步上传就这个原理,将返回的图片地址实时在父页面上显示出来,就可以实现用户预览上的图片了。
chaojie
2012-09-24 13:19:00 +08:00
@yibin001 post完成后生成js parent.xxx()
chaojie
2012-09-24 13:22:52 +08:00
百度云的文档很有问题。至今没找到怎么发html格式的邮件,难不成只有文本格式,那这个云消息服务发邮件就无用了吧。
yibin001
2012-09-24 13:24:17 +08:00
@chaojie
这种方法我用过,我是用swfupload上传,也就是把bae做成一个跳板,然后利用这个跳板做最后的上传,但bae有限制,curl的postdata不能超过10M。。。。。。超过10M就报413错了。
yibin001
2012-09-24 13:24:58 +08:00
@yaakua

这个实现不了,因为要提交的页面是地址是百度云的接口地址,这个地址是无法调用js的。。
yibin001
2012-09-24 13:26:15 +08:00
@chaojie
是的,那文档太鸡肋了。。。
chaojie
2012-09-24 13:29:24 +08:00
@yibin001 不把swf放在bae上,而是放在云存储的一个bucket上呢?
yaakua
2012-09-24 13:34:58 +08:00
@yibin001
难道提交完成后没有后续动作了?至少会返回点什么吧。
yibin001
2012-09-24 14:01:51 +08:00
@chaojie 不把swf放在bae上,而是放在云存储的一个bucket上呢?
擦,还真行,bcs会不会觉得这是个漏洞?然后给封了。
chaojie
2012-09-24 14:36:06 +08:00
@yaakua 返回什么是固定的,若要控制返回的东西必须用自己的服务器做中转。

@yibin001 觉得不是漏洞,反而是理当提供的功能。已经用签名在控制权限,这儿就不该针对flash有障碍。sae也该放开才是
yibin001
2012-09-24 14:41:35 +08:00
@chaojie
现在用swfupload上传超过300M的文件了,但同时也有另外的问题产生,用swfupload上传的文件,在bcs中的content-type都是application/octet-stream,这样一来,上传的图片也无法用浏览器查看,就会提示下载了~~不知道swfupload在上传前能否获到contentype。

@yaakua
bcs接口的返回值中,如果上传OK的话,只会返回header,body不会有任何值。
chaojie
2012-09-24 15:18:57 +08:00
我记得content-type是在生成url时可以指定的。
生成下载url时指定content-type试试
chaojie
2012-09-24 15:55:03 +08:00
@yibin001
其实就是直接在url后面加上&response-content-type=application/pdf这种。我试了,可以

curl -I http://bcs.duapp.com/desein/%2Fa.txt
返回content-type:text/plain

curl -I http://bcs.duapp.com/desein/%2Fa.txt?response-content-type=application/pdf
返回content-type:application/pdf

如果用chrome,直接显示“无法显示pdf”

文档在
http://developer.baidu.com/wiki/index.php?title=%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3/%E4%BA%91%E5%AD%98%E5%82%A8/Get_Object#request_header
chaojie
2012-09-24 15:56:34 +08:00
既然有response-content-disposition,那下载的文件名也是可以定制的
yibin001
2012-09-24 16:17:00 +08:00
@chaojie
这个我知道,是在上传时指定的content-type,但swfupload是获取不到content-type的,所以在上传到bcs中就是未传递该值,so,所有文件都会是application/octet-stream。
现在只能折中一下,获取file的type属性,该值只是swfupload获取要上传的文件的后缀名,根据后缀名动态拼content-type了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/48601

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX