上传前限制图像文件大小

时间:2015-11-05 08:33:13

标签: javascript jquery ajax image base64

我通过AJAX将图像作为base64字符串上传到ASP.NET WebService。由于AJAX / JSON,最大文件大小非常有限(在AJAX请求变得太长之前我的测试大约3MB)。

那么有没有办法将给定图像调整为FIXED文件大小(如3MB)而不是固定分辨率?

我现在已经知道了 Below is the code public class MainActivity extends ActionBarActivity implements NavigationDrawerFragment.FragmentDrawerListener, shareDataInterface { private Toolbar toolbar; NavigationDrawerFragment navigationDrawerFragment; HelperClass helperclass = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setTitle("tagIt"); toolbar.setSubtitle("make search easy.."); toolbar.setTitleTextColor(getResources().getColor(R.color.colorAccent)); setSupportActionBar(toolbar); getSupportActionBar().setDisplayShowHomeEnabled(true); utils= new Utils(); prefs = MyPrefs.getInstance(this); if(prefs.getBool(MyGlobals.PASSWORD_PROTECT) == true) { if(loggedin == 0) { loggedin = 1; utils.showDialog(MainActivity.this, MyGlobals.DIALOG_PIN_INPUT); } } // populate navigation drawer navigationDrawerFragment = (NavigationDrawerFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer); navigationDrawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), toolbar); navigationDrawerFragment.setDrawerListener(this); // establish data base connection and first read tags list for NAV drawer db = DatabaseHelper.getInstance(getApplicationContext()); navTitles =navigationDrawerFragment.titles; // create tag handler helperclass = HelperClass.getInstalce(getApplicationContext()); 用于调整大小的功能,但设置分辨率和/或质量不仅仅是为了减少它。

我已经有了一个想法,就是让一个循环在几个周期内调整图像大小,并通过检查base64长度检查大致的文件大小,但这似乎既不高效又不够精确。

我知道我可以填写请求,但我也必须更改WebService,我只想作为最后的手段。

2 个答案:

答案 0 :(得分:1)

JSON文件的大小没有限制。只要您有足够的资源来处理它,您就可以根据需要上传大文件。 4MB限制是ASP.NET端默认限制。

您可以在maxRequestLength - system.web配置密钥中添加httpRuntime属性,它会接受任意大小的文件:

<configuration>
  <system.web>
    <httpRuntime maxRequestLength = "1048576" />
  </system.web>
</configuration>

对于IIS 7+,您还需要添加:

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="1073741824" />
    </requestFiltering>
  </security>
</system.webServer>

如果您仍想调整图像大小,可以在服务器端或客户端执行此操作 Resize an Image C#
HTML5 Pre-resize images before uploading

此外,还有一些插件可以执行此操作:Image resizing client-side with javascript before upload to the server

服务器端方式更可靠且与浏览器无关,而客户端方法将减少到服务器的传入流量。

答案 1 :(得分:-1)

如果您有输入文件元素......

<input type="file" id="myFile" />

你可以使用

var sizeInBytes = document.getElementById('myFile').files[0].size

获取文件大小