我尝试使用200MB附件向Autodesk API存储区端点发送以下发布请求:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
此请求产生以下响应:
Douglass-MBP-2:Desktop douglasduhaime$ curl -v 'https://developer.api.autodesk.com/oss/v2/buckets/secret-bucket/objects/200mbfile.nwd' -X 'PUT' -H 'Authorization: Bearer myOauthCredentials' -H 'Content-Type: application/octet-stream' -H 'Content-Length: 308331' -T '200mbfile.nwd'
有谁知道我怎么能继续并发送完整的数据包?我很感激别人可以提供的任何建议!
答案 0 :(得分:2)
对于大型上传,最好使用/resumable端点。可以从that sample获取使用示例,也可以在下面粘贴:
program
.command ('resumable')
.description ('upload a file in multiple pieces (i.e. resumables)')
.arguments ('<file> <pieces>')
.action (function (file, pieces) {
pieces =pieces || 2 ;
var bucketKey =readBucketKey () ;
if ( !checkBucketKey (bucketKey) )
return ;
var fileKey =makeKey (file) ;
fs.stat (file, function (err, stats) {
if ( err )
return (console.log (error.message)) ;
var size =stats.size ;
var pieceSz =parseInt (size / pieces) ;
var modSz =size % pieces ;
if ( modSz )
pieces++ ;
console.log ('Uploading file: ' + file + ' in ' + pieces + ' pieces') ;
var piecesMap =Array.apply (null, { length: pieces }).map (Number.call, Number) ;
var sessionId =Math.random ().toString (36).replace (/[^a-z]+/g, '').substr (0, 12) ;
async.eachLimit (piecesMap, 1,
function (i, callback) {
var start =i * pieceSz ;
var end =Math.min (size, (i + 1) * pieceSz) - 1 ;
var range ="bytes " + start + "-" + end + "/" + size ;
var length =end - start + 1 ;
console.log ('Loading ' + range) ;
// For resumable (large files), make sure to renew the token first
//access_token (function () {
oauthExec ()
.then (function (accessToken) {
var readStream =fs.createReadStream (file, { 'start': start, 'end': end }) ;
return (ossObjects.uploadChunk (bucketKey, fileKey, length, range, sessionId, readStream, {})) ;
})
.then (function (data) {
callback () ;
if ( data === undefined )
return (console.log ('Partial upload accepted')) ;
fs.writeFile (__dirname + '/data/' + bucketKey + '.' + fileKey + '.json', JSON.stringify (data, null, 4), function (err) {
if ( err )
return (console.error ('Failed to create ' + bucketKey + '.' + fileKey + '.json file')) ;
}) ;
console.log ('Upload successful') ;
console.log ('ID: ' + data.objectId) ;
console.log ('URN: ' + new Buffer (data.objectId).toString ('base64')) ;
console.log ('Location: ' + data.location) ;
})
.catch (function (error) {
errorHandler (error, 'Failed to upload file') ;
})
;
}) ;
}) ;
}) ;
答案 1 :(得分:1)
没过多久就弄明白了 - 我只需要从POST请求中删除-H 'Content-Length: 308331'
标题(我从他们的教程中复制了内容长度,内容长度小于数据包我正在发送,因此继续留言。