Lio*_*789 1 java android heroku amazon-s3 node.js
我目前正在从我的应用程序(android)上传视频,这会导致应用程序崩溃,试图弄清楚如何使其在两端,应用程序和服务器端都高效...在一天结束时它会上传视频但崩溃的应用程序或服务器取决于哪一个内存耗尽.
Stack - Java,改造,Node.js,knox,heroku,amazonS3
对于客户端android :(翻译,java):
休息文件:
@Multipart
@POST("/addMedia")
public void addMedia(
@Part("name") String name,
@Part("categ") String category,
@Part("desc") String desc,
@Part("creatorId") String creatorId,
@Part("isItAPicture") String isItAPicture, //if true it is a picture
@Part("mediaFile") TypedFile mediaFile,
Callback<UserResponse> callback);
Run Code Online (Sandbox Code Playgroud)
创建类文件:
ApiManager.getAsyncApi().addMedia(title, categ, descr, creatorId, String.valueOf(isPictureNotvideo), media, new Callback<UserResponse>() {
@Override
public void success(UserResponse userResponse, Response response) {
\
}
@Override
public void failure(RetrofitError error) {
throw error;
}
});
Run Code Online (Sandbox Code Playgroud)
服务器端(Node.js,heroku,AmazonS3,knox模块)
var s3 = knox.createClient({
key: config.amazonS3.key,
secret: config.amazonS3.secret,
bucket:config.amazonS3.bucketMedia
});
function setupAndCreateMedia ( cb) {
if(req.files && req.files.mediaFile) {
console.log("Received file:\n" + JSON.stringify(req.files));
//add p for pics will do v for vids
videoID = "v" + path.basename(req.files.mediaFile.path);
tmp_path = req.files.mediaFile.path;
targetPathSmall = './public/img/media/' + videoID;
videoConvert = req.files.mediaFile.name;
var video = req.files.mediaFile;
var s3Headers = {
'Content-Type': video.type,
'x-amz-acl': 'public-read'
};
//console.log('stdout:', stdout, targetPathSmall)
s3.putStream(targetPathSmall, videoID, s3Headers, function(err, s3response){
//handle, respond
if(err) {
console.log(err);
} else {
console.log("saved to S3");
//console.log(s3response);
cb(null, videoID);
}
});
} else {
videoID = "";
cb(null, videoID);
}
}
Run Code Online (Sandbox Code Playgroud)
这是android上的崩溃消息:
Caused by: java.lang.OutOfMemoryError: Failed to allocate a 48298892 byte allocation with 16777216 free bytes and 44MB until OOM
Run Code Online (Sandbox Code Playgroud)
问题可能是由日志记录引起的.Retrofit的记录器读取您的视频二进制文件,此处引发了OOM异常.
要防止它,请使用以下方法禁用restAdapter的日志:
setLogLevel(LogLevel.NONE)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
726 次 |
| 最近记录: |