簡體   English   中英

使用用於上載多個文件的Play框架將2 MB文件上載到AWS S3失敗

[英]2 MB file upload to AWS S3 fails with Play framework used for uploading multiple files

我收到此錯誤,不確定到底在哪里。 當我嘗試上傳100 KB的文件時; 可以很好地上傳到S3,但是對於2MB的文件,它不會失敗,沒有嚴重的異常,但這是:

[trace] play - Sending simple result: SimpleResult(200, Map(Content-Type -> text/html;    charset=utf-8, Set-Cookie -> ))
[trace] application - Exception caught in Netty
java.lang.ClassCastException: scala.runtime.BoxedUnit cannot be cast to scala.Function0
     at     play.core.server.netty.PlayDefaultUpstreamHandler.channelDisconnected(PlayDefaultUpstreamHa n dler.scala:50) ~[play.play_2.10-2.1.0.jar:2.1.0]
    at org.jboss.netty.handler.codec.replay.ReplayingDecoder.cleanup(ReplayingDecoder.java:570) ~[io.netty.netty-3.6.3.Final.jar:na]
    at org.jboss.netty.handler.codec.frame.FrameDecoder.channelDisconnected(FrameDecoder.java:365) ~[io.netty.netty-3.6.3.Final.jar:na]
    at org.jboss.netty.channel.Channels.fireChannelDisconnected(Channels.java:396) ~[io.netty.netty-3.6.3.Final.jar:na]
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.close(AbstractNioWorker.java:336) ~[io.netty.netty-3.6.3.Final.jar:na]
      at     org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.handleAcceptedSocket(NioServ    erSocketPipelineSink.java:81) ~[io.netty.netty-3.6.3.Final.jar:na]
[trace] play - Http request received by netty: DefaultHttpRequest(chunked: false)
GET /favicon.ico HTTP/1.0
X-Real-IP: X.X.X.X
X-Scheme: http
X-Forwarded-For: X.X.X.X, X.X.X.X
Host: 
Connection: close
Accept: */*
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Cookie: s_nr=1369981333181; PLAY_SESSION=f672ed541f895539f476

它甚至沒有到達Web服務器並失敗,並拋出500頁找不到錯誤; 因為它完全關閉了連接。

我正在使用Play Framework 2.0和AWS S3 HL Multipart上傳。 我等到上傳完成后才可以使用。

請讓我知道可能是什么問題; 或任何導致這?

這是我的代碼:

        //Setting expiration time for the files in temp bucket to 24 hours [1 Day]
        ObjectMetadata objectMetadata = new ObjectMetadata();
        objectMetadata.setExpirationTime(DateTime.now().plusDays(1).toDate());
        objectMetadata.setContentLength(UploadData.getFileSize());

        //Setting user data
        userData = new HashMap<>();
        userData.put(UserMetaData.filename.name(), UploadData.getFileName());
        if (!NullChecker.isEmpty(UploadData.getFileSize())) {
            userData.put(UserMetaData.size.name(), String.valueOf(UploadData.getFileSize()));
        }
        if (!NullChecker.isEmpty(UploadData.getSerialNo())) {
            userData.put(UserMetaData.serialno.name(), UploadData.getSerialNo());
        }
        objectMetadata.setUserMetadata(userData);

        // TransferManager processes all transfers asynchronously,
        // so this call will return immediately.
        upload = transferManager.upload(bucketName, key, UploadData.getFileInputStream(), objectMetadata);

        try {
            // Or you can block and wait for the upload to finish
            upload.waitForCompletion();
        } catch (AmazonClientException amazonClientException) {
            logger.info("Unable to upload file, upload was aborted.");
            amazonClientException.printStackTrace();
        }

我在這里收到的回復感到非常高興(實際上沒有); 我不確定你們中的極客是否都不知道這個問題或事實有任何投入:但是無論如何,它已經解決了,這就是答案:

問題是,在我們的Unix機器中,配置了Ngnix,並且在檢查Ngnix錯誤日志時發現:

[error] 25556#0: *52 client intended to send too large body:

甚至不允許上傳2 MB的文件。 將配置更改為更高的大小限制后; 它開始工作。 下面的代碼將幫助您:

php.ini中的更改

將最大文件上傳大小更改為100MB

vim /etc/php5/fpm/php.ini

組…

upload_max_filesize = 100M
post_max_size = 100M

謝謝,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM